2016-07-15 6 views
-1

私が構築しているGoogle Chrome拡張機能の一部として、DOMにいくつかの要素を追加するウェブページにコードを注入する必要があります。未確定のIDを持つ既知のIDを持つdivの子供を選択するにはどうすればよいですか?

私が遭遇した1つの問題は、ウェブページがそれぞれの負荷で異なる、不確定なIDを作成するときに特定の子要素を選択する方法です。私は以下の例を提供しました。

outerDiv1とouterDiv2が安定したIDを持ち、outerクラスの子をinnerクラスで選択したいとしたら、これを行う最善の方法は何ですか?

function findChildWithInnerClass(divID) { 
    var children = divID.childNodes; 

    for (var i = 0; i < children.length; i++) { 
     if (children[i].className === "inner") { 
     return children[i]; 
     } 
    } 
} 

そしてouterDiv2のライブ要素とそれを呼び出す:

<div id = "outerDiv1"> 
    <div class = "random"></div> 
    <div id = [INDETERMINATE] class = "inner"></div> 
</div> 
<div id = "outerDiv2"> 
    <div id = [INDETERMINATE] class = "inner"></div> 
    <div class = "random"></div> 
</div> 

一つの解決策は、このような関数を作成することです。

しかし、これは少し長めのようです。 document.querySelector()を使用して適用できるセレクタでこれを行うより速い方法がありますか?

純粋なJavaScriptの回答のみに興味があります。ところで、jQueryは必要ありません。

+0

.innerを含むchildDivsに興味がある場合は、document.querySelectorAll( '#outerDiv1 .inner');を使用できます。 –

+0

達成しようとしていることは何ですか?そのサウンドから、子供の特定のdom要素のクリックイベントを取得してそれを処理したいのですか? (バブルアップ)が、トップダウンファッション(伝播)からコーディングしています。ユーザー相互作用のトップダウンコーディングは、ユーザーの対話ポイントをDOMツリーのさらに下に一意に識別できない場合、常に困難になります。 – Jay

答えて

1

document.querySelector("#outerDiv1 .inner")を使用できます。

任意のCSSセレクタを使用できます。

ノードが1つ返されます。

セレクタに対応するすべてのノードを選択する場合は、document.querySelectorAll("#outerDiv1 .inner")を使用できます。NodeListオブジェクトを返します(document.getElementsByTagNameなど)。

これはIE8 +、Chrome 4以降、Firefox 3.5以降、Safari 3.2以降、Opera 10以降でサポートされています。

+3

"* document.querySelector("#outerDiv1 .inner ")を使うことができます... NodeListオブジェクトを返します*" - いいえ、そうではありません。 'document.querySelector()'は、DOMノード(指定されたセレクタに一致するドキュメント内の最初のノード)または 'null'を返します。おそらく 'document.querySelectorAll()'を考えているでしょう。 –

+0

@DavidThomas:ありがとう、私の答えを更新しました。 – beerwin

関連する問題