2012-08-01 24 views
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> 

應該保存所有的大學對象到它的工作原理大學的陣列,但它在所有項目只替換最後一個項目在$之後。每個我不知道爲什麼?

+0

我敢肯定,'all'收集不是跨瀏覽器。你爲什麼使用它?你有jQuery。 – 2012-08-01 19:53:41

+0

@ kamiar3001你可以給這個代碼提供一些上下文(以HTML的形式)嗎?這對我瞭解代碼真的很有幫助。如果你可以粘貼你試圖在這裏運行這個腳本的HTML(http://jsfiddle.net/5zV29/1/),我們可以看看發生了什麼。謝謝 ! – 2012-08-01 19:55:40

回答

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')

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. 
}); 
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;     
});