0

我写了这个 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>

它应该将所有大学对象保存到它工作的大学数组中,但它只替换 $.each 之后所有项目中的最后一项我不知道为什么?

4

3 回答 3

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]or $( this ).children( ':first' )

于 2012-08-01T19:56:21.113 回答
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;                
});
于 2012-08-01T19:57:46.993 回答
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.
});
于 2012-08-01T19:54:46.073 回答