2013-07-21 10 views
19

Best way to find out if element is a descendant of anotherこれはもう1つの質問ですが、jqueryと非常に似ています。divが別の子孫の子であるかどうか確認してください

jsではどうしますか? divs a、b、c、dがこの順序でネストされています。 また、問題があるかどうかわからない場合は、別のa、b、c ...と別のものがあります。それは単なる要素ではありません。同じid/classで多くのことがあります。

だから、もしdが親を持っているかどうかを知りたいのですが(親に親がある限り、どれくらい深くネストされていても)、aと呼ばれます。

編集: また、 "a"の子ノードを確認して "d"がその1つであるかどうかを確認できましたが、実装できませんでした。誰かがそれを働かせることができれば、それはすごいです。

+7

は、あってはなりません' id'sが同じDOM内で一意でなければなりません。 – Teemu

+0

私はそれらをクラスとして使用しましたが、私は間違っていますが、それは単なる意味論の問題です。私はとにかく秒でクラスにすべてを変更することができます。 – purplecircles

+0

jquery? 15char – purplecircles

答えて

9
// x is the element we are checking 
while (x = x.parentNode) { 
    if (x.id == "a") console.log("FOUND"); 
} 
+0

ありがとうございます。 [parentElement]について知りませんでした(http://stackoverflow.com/questions/8685739/difference-between-dom-parentnode-and-parentelement#8685780)。 +1 – Stano

+2

parentElementの代わりにparentNodeを使用する必要があります。 parentElementは、サポートされなくなった古いInternet Explorerのものです。 – BrianK

+2

'node.contains'を使うほうが良い(下記の答えを参照) – mb21

12

純粋なjavascriptを使用する場合はnode.containsを使用してください。

var a = document.getElementById('a'); 
var d = document.getElementById('d') 
if (a.contains(d)) { 
    alert('d is a child of a'); 
} 

フィドル: "同じid`によって多くがあり、`" http://jsfiddle.net/FlameTrap/pwVPC/

+0

しかし、これは、クラスではなく、 'id'で識別される要素が必要です。 –

+0

@PedroFerreira確かに?それはIDを持たない要素でも働いているようです。 –

+0

@ジャマイカのセクシーな男:どうやってそれらを特定していますか? クラス別(getElementsByClassName)?動作しません。 –

関連する問題