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]またはを書くことができます$( 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 に答える