2012-02-03 228 views
8

的屬性我想使用獲取父節點

$(this).parentNode.attr('data-element') 

應返回0 - 在字符串5,但它只是將無法正常工作。我使用它在這樣的函數

$('.someClass').each(function(){ 
    $(this).html(SomeFunction('SomeString', $(this).parentNode.attr('data-element'))); 
}); 

所有類「的元素SomeClass的」有一個parentNode

<li class="element" data-element: 1 (or any number from 0 to 5 (including))> </li> 

,我不知道哪裏是錯誤的。我究竟做錯了什麼?

--David

+1

,而不是parentNode使用父()。 parentNode是來自簡單的JavaScript,並不適用於jQuery元素 – machineaddict 2012-02-03 09:21:54

回答

30

你混合jQuery和普通的JavaScript在同一行代碼中,並且不起作用。您可以使用:

$(this).parent().attr('data-element'); // jQuery 

this.parentNode.getAttribute("data-element"); // plain javascript 

parentNode不是一個jQuery對象的屬性,所以你不能將兩者攪和你在做它的方式。獲取父級的jQuery方法是.parent()

+0

謝謝!我會在10分鐘內回答這個問題! – 2012-02-03 09:24:13

3

儘量不要做這樣的:

$(this).parent().attr('data-element'); 

有關像.parent功能的詳細信息()見jQuery的文檔的遍歷部分: http://api.jquery.com/category/traversing/

+0

我剛問完問題後才找到答案,不過謝謝你的答案! – 2012-02-03 09:23:00

4

你應該做

$(this).parent().attr('data-element') 

因爲你不能非jQuery對象

+0

我剛問完後才找到答案,不過謝謝你的回答! – 2012-02-03 09:22:45

3

使用jQuery上稱之爲attr()它應該是:

$(this).parent().attr('data-element'); 

沒有使用jQuery,這將是:

this.parentNode.getAttribute("data-element") 
0

我更喜歡使用:從jQuery的

var item = $(this); 

var parent = item.closest(".element"); //using the class for selection 

//and then use parent.attr('data-element')