$ .each将所有项目保存到对象数组中

时间:2012-08-01 19:50:46

标签: jquery

我写了这个jquery代码:

    <script type="text/javascript">
    $(document).ready(function () {
        var university = { title: 0, href: 1, link: 2 };
        var universities = [];
        $(".aname").each(function (key, value) {
            university.href = value.all[0].href;
            university.title = value.all[0].innerHTML;
            university.link = value.parentNode.all[2].all[0];
            universities[key] = university;                
        });
       debugger; // now if you watch universities this only last item.
    });
</script>

它应该将所有大学对象保存到它工作的大学阵列中,但是它只会在$。之后替换所有项目中的最后一项。我不知道为什么?

3 个答案:

答案 0 :(得分:2)

怎么样:

var universities = $( '.aname' ).map(function () {
    return {
        href: this.all[0].href,
        title: this.all[0].innerHTML,
        link: this.parentNode.all[2].all[0]       
    };
}).get();

但是,我不认为all集合是跨浏览器的。在这种情况下,请考虑使用jQuery的遍历方法或本机方法替换它。例如,如果all[0]选择第一个孩子(是吗?),那么您可以写this.children[0]$( this ).children( ':first' )

答案 1 :(得分:1)

因为您修改了全局大学对象而不是创建新大学对象。请注意,当您使用运算符'='时,javascript复制引用对象而不是对象。如果你想深度复制对象,你可以使用jQuery.extend函数。

试试这个:

var universities = [];
$(".aname").each(function (key, value) {
    var university = {};
    university.href = value.all[0].href;
    university.title = value.all[0].innerHTML;
    university.link = value.parentNode.all[2].all[0];
    universities[key] = university;                
});

答案 2 :(得分:0)

我认为您可能需要使用数组的.push()函数向其中添加项目:

$(document).ready(function () {
    var university = { title: 0, href: 1, link: 2 };
    var universities = [];
    $(".aname").each(function (key, value) {
        university.href = value.all[0].href;
        university.title = value.all[0].innerHTML;
        university.link = value.parentNode.all[2].all[0];
        universities.push(university);                
    });
   debugger; // now if you watch universities this only last item.
});