【问题标题】:Append json data to html class name将 json 数据附加到 html 类名
【发布时间】:2013-11-03 11:47:24
【问题描述】:

我的 json 代码有问题。 我想附加每个 json 值来自要附加到与 json 数据的键匹配的 html 类名的键。

这是我的Live demo

如果您在生活演示中看到结果。它只是附加最后一条记录。 是否可以让它按顺序显示所有记录?

json

var json = '[{"castle":"big","commercial":"large","common":"sergio","cultural":"2009"},' + '{"castle":"big2","commercial":"large2","common":"sergio2","cultural":"20092"}]';

html

<div class="castle"></div>
<div class="commercial"></div>
<div class="common"></div>
<div class="cultural"></div>

javascript

var data = $.parseJSON(json);
$.each(data, function(l,v) {
    $.each(v, function(k,o) {
        $('.'+k).attr('id', k+o);
        console.log($('#'+k+o).attr('id'));
        $('#'+k+o).text(o);
     });
});

更多说明... 我希望现场演示中的结果看起来像这样

大 大的 塞尔吉奥 2009年, 大2 大2 塞尔吉奥2 20092

【问题讨论】:

  • 您没有在类名上附加任何内容。你应该给出你期望的 HTML。

标签: html json


【解决方案1】:

尝试使用

$('#'+k+o).append(o+',');

而不是

$('#'+k+o).text(o);

Demo


但我会使用更快的替代方案:

var data = JSON.parse(json);
for(var i in data[0]) {
    if(data[0].hasOwnProperty(i)) {
        var txt = data[0][i];
        for(var j=1; j<data.length; j++) {
            txt += ', ' + data[j][i];
        }
        $('.'+i).text(txt);
    }
}

Demo

请注意,$.each 的速度比 jQuery 开发人员推荐的尽可能使用 JS 循环的速度还要慢。并且请注意,DOM 更改是昂贵的,因此最好将您的文本存储在一个变量中,当您拥有所有内容时追加它,但避免部分地追加它。


如果您不想将它们混合,请使用

var data = JSON.parse(json),
    $el = $('#data');
for(var i=0, l=data.length; i<l; ++i) {
    for(var j in data[i]) {
        if(data[i].hasOwnProperty(j)) {
            $el.append(
                $('<li>')
                    .attr("id",j+data[i][j])
                    .text(data[i][j])
            );
        }
    }
}

Demo

【讨论】:

  • 谢谢。这有点帮助。
  • 我是否必须附加到另一个 div 才能使它们按顺序排列?
  • @user2898514 按顺序是什么意思?
  • 喜欢这个 big large sergio 2009, big2 large2 sergio2 20092
  • 将所有附加的记录附加到另一个 div 以使它们分开
猜你喜欢
  • 2018-08-27
  • 2016-08-14
  • 2021-07-07
  • 2017-09-22
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
相关资源
最近更新 更多