【问题标题】:Adding to selection within a loop using JSON使用 JSON 在循环中添加选择
【发布时间】:2014-07-13 00:39:44
【问题描述】:

我正在尝试将 JSON 映射到特定的 HTML 结构。我想遍历 JSON,创建一个包含它应该具有的结构的 jQuery 对象,然后将它添加到之前启动的集合中。

我事先测试了 JSON 的长度,之后测试了集合的长度,但集合的输出为 0。我不明白为什么 add() 方法在这里对我不起作用.

我也尝试使用map() 来获取我的收藏,但无济于事。

JSON 示例

var d = [
    {"NOTICE_ID":"23","TITLE":"fw4r4","BODY":"34t35t","CREATED_BY":"George","TIMESTAMP":"1400856243.1416"},
    {"NOTICE_ID":"22","TITLE":"op","BODY":"op","CREATED_BY":"George","TIMESTAMP":"1400854953.8122"}
]

jQuery

console.log(d.length)

$sections = $([]);
$.each(d, function(){
    var $sect = $('<section id="notice-'+this['NOTICE_ID']+'" class="type-1" data-time="'+this["TIMESTAMP"]+'"></section>'),
        $head = $("<h2>"+this["TITLE"]+"</h2>").appendTo($sect),
        $date = $("<span>"+this["TIMESTAMP"]+"</span>").appendTo($head),
        $body = $("<div>"+this["BODY"]+"</div>").appendTo($sect);
    $sections.add($sect);
});

console.log($sections.length);

我希望 $sections.lengthd.length 相同,但它始终为 0。

JSFiddle

我的目标是最终对这些部分进行排序,然后将它们作为一个附加到容器中。如果我从循环中附加每个元素,它工作正常:

JSFiddle

为什么我无法添加到我的空 jQuery 对象?

【问题讨论】:

    标签: jquery json map append


    【解决方案1】:

    你可以试试$.merge():

    $.merge($sections,$sect);
    

    http://jsfiddle.net/darkajax/HGQ9V/

    【讨论】:

    • @oGeez 是的,当我发现时我很惊讶。我很高兴它成功了!
    【解决方案2】:

    只需将 $sections 设置为标准 javascript 数组并使用 push() 向其中添加新元素:

    $sections = new Array();
    .
    .
    .
    $sections.push($sect);
    

    http://jsfiddle.net/T4N4f/3/

    【讨论】:

    • 但这只是一个标准的 jQuery 对象数组。我想要所有部分的 jQuery 对象。
    • 所有部分都是 jQuery 对象,它们只是被保存在一个数组中。
    • 我明白了。但我不能在 $sections 上调用 jQuery 方法,因为它是一个数组。
    • 你想调用什么方法?或者换个方式问,如果数组是一个 jQuery 对象,你不能用数组做什么?
    • 这不是重点。问题是如何在一个 jQuery 对象中获取循环中创建的所有 jQuery 对象。不过还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多