javascript - 将 JSON 转换为 HTML

标签 javascript jquery html json

我有一个 json 文件,其中包含我想使用 jquery 函数将其移至特定 html id 的歌曲列表。这是我的 json 文件中五首歌曲中的 2 首(全部遵循相同的格式:

{
    "songs": [
        {
            "title": "Hotel California",
            "artist": "Eagles",
            "album": "Hotel California",
            "album_cover": "https://en.wikipedia.org/wiki/Hotel_California_(Eagles_album)#/media/File:Hotelcalifornia.jpg",
            "release_date": "1976",
            "site": "http://www.allmusic.com/album/hotel_california",
            "generes": "Rock"
        },
        {
            "title": "Back in Black",
            "artist": "ACDC",
            "album": "Back in Black",
            "album_cover": "http://www.billboard.com/files/styles/review_main_image/public/media/acdc-back-in-black-album-cover-650.jpg",
            "release_date": "1980",
            "site": "http://www.allmusic.com/album/back_in_black",
            "generes": "Rock"
        }
    ]
}

这是我试图将数据加载到的 html:

<!doctype html>
<html>
<head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  <title>Json</title>
</head>
<body>
  <a id="site" href="#">
    <img id="coverart" src="noalbum.png" />
  </a>
  <h1 id="title"></h1>
  <h2 id="artist"></h2>
  <h2 id="album"></h2>
  <p id="date"></p>
  <ul id="genres">
  </ul>
</body>
<script src="my.js"></script>  
</html>

我正在尝试创建一个函数,用适当的数据填充这些标签并重复该过程,直到所有歌曲都被模制成上述刚刚重复的 html 格式。这是到目前为止我的 js 文件:

$("a").click(function() {
  GetIndexData()
});

function GetIndexData() {
  var param = "&nocache=" + Math.random() * 1000000;
  $.getJSON('my.js', param, function(data) {
    $.each(data, function(key, val) {
      $('#' + key).html(val);
    })
  });
}

任何帮助都会非常感谢!

最佳答案

因此,您正在拉入一个包含歌曲列表和详细信息的 JSON 文件。我根据您提供的鳕鱼剪子想出了这个。

您必须创建一个 HTML 模板,该模板将填充您的数据。为此,您必须使用类而不是 id。我通过 forEach 循环运行歌曲数组来填充所有内容。

我还将你的属类改成了数组;如果真是这样的话。如果不是,我还有一个将其呈现为单个值的版本。​​

    function render(data) {
        data.forEach(function(item) {
            var templ = $('<div class="album-wrap"> <a class="site" href="' + item.site + '"><img class="coverart" src="' + item.album_cover + '"/></a><h1 class="title">' + item.title + '</h1><h2 class="artist">' + item.artist + '</h2><h2 class="album">' + item.album + '</h2><p class="date">' + item.release_date + '</p><ul class="genres"></ul></div>'),
                generesLi = templ.find('.genres');

            generesRender(item.generes, generesLi);

            $('body').append(templ);
        });
    }

    function generesRender(arr, elem) {
        arr.forEach(function(item) {
            elem.append('<li>' + item + '</li>');
        });
    }
    render(data);

这是如果 Generes 不是数组的话。

 function render(data) {
            data.forEach(function(item) {
                var templ = $('<div class="album-wrap"> <a class="site" href="' + item.site + '"><img class="coverart" src="' + item.album_cover + '"/></a><h1 class="title">' + item.title + '</h1><h2 class="artist">' + item.artist + '</h2><h2 class="album">' + item.album + '</h2><p class="date">' + item.release_date + '</p><p class="genres">' + item.generes + '</p></div>');
                $('body').append(templ);
            });
        }

您的 getJSON 调用也已关闭。我不接受参数(据我所知),您也不需要它。所以应该是这样的。

$.getJSON('my.js', function(data) {
    render(data);
});

我使用了页面上的 JSON。我看起来像这样。

var data = [{
            "title": "Hotel California",
            "artist": "Eagles",
            "album": "Hotel California",
            "album_cover": "https://en.wikipedia.org/wiki/Hotel_California_(Eagles_album)#/media/File:Hotelcalifornia.jpg",
            "release_date": "1976",
            "site": "http://www.allmusic.com/album/hotel_california",
            "generes": ["Rock", "Country", "Electric"]
        }, {
            "title": "Back in Black",
            "artist": "ACDC",
            "album": "Back in Black",
            "album_cover": "http://www.billboard.com/files/styles/review_main_image/public/media/acdc-back-in-black-album-cover-650.jpg",
            "release_date": "1980",
            "site": "http://www.allmusic.com/album/back_in_black",
            "generes": ["Rock", "Jazz"]
        }];

因此,如果您的数据看起来像这样,那么该解决方案应该有效。如果没有,则控制台记录它并发布您得到的内容,我将进行调整。

关于javascript - 将 JSON 转换为 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39967354/

相关文章:

javascript - $(window).scroll(function() 不工作

javascript - 从对象数组创建模拟分层选择框

javascript - 向 window.location 发送一个变量,该变量从数据库中获取

jquery - 专门为选择元素分配 Jquery-UI 的 css?

javascript - React.JS中独立组件之间如何通信?

javascript - 无法使用 Node.js 和 Express 捕获 POST 参数

javascript - 在保存/提交时刷新 NetSuite portlet

javascript - 计算背景图像比

jquery - 嵌套 <li> 在幻灯片上不起作用

javascript - 如何选择具有部分属性值的元素在两个数字之间