2012-02-03 195 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')