2011-11-27 80 views
1

我正試圖通過每個段落元素在div容器中存儲數組中的對象數組。 get()方法。我嘗試訪問該屬性。 attr()但它似乎不工作。我如何修改此代碼以便能夠訪問每條消息的'id'屬性?使用.attr()和.get()問題

 var messages = $("#message_container p").get(); 
     var idstest = []; 

     for (int i = 0; i < messages.length; i++){ 
      idstest.push(messages[i].attr("id")); 
     } 

我認爲這與一些基本的不兼容性有關。 get()和。 attr()。當我'提醒'提供的對象。 get()我收到[object HTML---]。我假設這不是使用的必要形式。 attr

+0

你可以使用像http://jsfiddle.net/ –

+0

不'$(「#message_container p」)'返回一個元素的數組嗎? – chustar

+0

@chustar它返回一個包含一組元素的jquery對象。不是嚴格的數組。 –

回答

3

get會給你的DOM元素。這些不是jQuery對象,所以你不能使用attr。在這裏沒有理由使用get

var messages = $("#message_container p"); 
    var idstest = []; 

    messages.each(function(){ 
     idstest.push($(this).attr("id")); 
    }); 

http://jsfiddle.net/ujdeH/

編輯:您也不能使用int

如果由於某種原因你是想用get獲得的原始DOM元素,你就用.id

http://jsfiddle.net/ujdeH/1/

var messages = $("#message_container p").get(); 
var idstest = []; 

for (var i = 0; i < messages.length; i++) { 
    idstest.push(messages[i].id); 
} 
+0

您不必創建一個jquery對象並使用attr()來獲取ID,回調中的'this'是當前DOM元素:'idtest.push(this.id);' –

+0

謝謝!我沒有意識到它必須以jquery對象的形式! – Vivek

+0

@DidierG。好點子。如果您打算處理元素的唯一方法是獲取其ID,那麼直接從DOM元素中獲取它會更有效率。 –

0

你應該換行對象jQuery的容器:

$(messages[i]).attr("id") 
+0

這可以工作,但不是最有效的解決方案:1. $(「#message_container p」)'得到一個jquery對象; 2.'.get()'提取所有DOM元素; 3.'$(messages [i])'再次創建一個新的jquery對象 –

+0

@DidierG。你絕對是對的。其實我正在考慮寫關於刪除「get()」,但我想我會堅持爲什麼'attr()'不工作。 – Iravanchi

1

嘗試,而不是:

var idstest = []; 


$("#message_container p").each(function(i){ 

idstest.push($(this).attr("id")); 


}); 
0

實際上這裏不需要jQuery,這個純JavaScript在所有瀏覽器上都能正常工作:

var idstest = []; 
var container = document.getElementById("message_container"); 
if (container) { 
    var messages = container.getElementsByTagName("p"); 
    for (var i = 0; i < messages.length; i++) { 
     idstest.push(messages[i].id); 
    } 
} 

jQuery是一切都很好,功能強大,但如果你可以通過簡短/簡單的純JS實現相同的任務,那麼爲什麼不呢?

這就是說,如果你現有的所有代碼都是jQuery,那麼爲了一致性和可讀性,你可能會更好地堅持使用它(使用來自其他正確答案的代碼)。

+0

有趣。我一定會爲將來的代碼記住這一點。 – Vivek

1

只是想添加$.map快捷方式:http://jsfiddle.net/UuWq3/

var idstest = $.map(messages, function(elem) { 
    return $(elem).attr("id"); 
}); 

$.map返回基於原始陣列(或jQuery對象)上的新的數組。返回的數組由您傳遞的函數構造而成(在這種情況下,messages由函數轉換,使得每個元素都被它的ID替換)。