web-dev-qa-db-ja.com

親ノードの属性を取得する

使おうとしています

$(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>

そして、どこに間違いがあるのか​​私にはわかりません。私は何が間違っているのですか?

-デービッド

12
David Debnar

同じコード行にjQueryとプレーンJavaScriptを混在させているため、機能しません。次のいずれかを使用できます。

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

または

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

parentNodeはjQueryオブジェクトのプロパティではないため、2つを以前のように混在させることはできません。親を取得するためのjQueryメソッドは.parent()です。

36
jfriend00

やったほうがいい

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

jQuery以外のオブジェクトでattr()を呼び出すことはできないため

4

代わりにこれを試してください:

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

.parent()などの関数の詳細については、JQueryドキュメントの「トラバース」セクションを参照してください。 http://api.jquery.com/category/traversing/

3
Jon

Jqueryを使用すると、次のようになります。

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

Jqueryを使用しない場合、これは次のようになります。

this.parentNode.getAttribute("data-element")
3
jerjer

私は使いたい:

var item = $(this);

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

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