新しく作成された要素(例:$("<div/>")
)として生成され、親を持たないjQueryの選択、または実際にはDOMの要素です。jQueryの選択がDOM内にあるかどうかを確認
選択した要素が実際に現在のDOMツリーに存在するかどうかを判断する最も効率的な方法は何ですか?
1つの可能性は.parent()
に電話することですが、より効率的な方法があると思われます。
新しく作成された要素(例:$("<div/>")
)として生成され、親を持たないjQueryの選択、または実際にはDOMの要素です。jQueryの選択がDOM内にあるかどうかを確認
選択した要素が実際に現在のDOMツリーに存在するかどうかを判断する最も効率的な方法は何ですか?
1つの可能性は.parent()
に電話することですが、より効率的な方法があると思われます。
となるだろう、私はその両方の私の質問を実現し、 Andyの解(node.parentNode
を使用)は一般化できる。少なくとも1つの祖先を持っていても、jQueryの選択にはフルバージョンがあります。
/**
* Returns true if this selection is part of the current DOM;
* false if it's a fragment.
* @return {Boolean}
*/
jQuery.fn.inDom = function() {
// Get the first element in the jQuery selection
var node = this[0];
while (node) {
if (node.nodeType === Node.DOCUMENT_NODE) {
return true;
}
node = node.parentNode;
}
return false;
}
新しく作成された要素にIDを与え、IDを問い合わせます。
jQuery index methodを参照してください。
$(yourDiv).index('body div')
のようなものがたくさんあります。
.parent()
を求めるアイデアはそれほど悪くはありませんが、実際にはかなり一般的な方法です。とにかく、.contains()
メソッドを使用することもできます。
var newdiv = $('<div>');
if($.contains(document.body, newdiv[0])) {
}
参照:.contains()
例:http://www.jsfiddle.net/gGPav/
パフォーマンス:パフォーマンスを見てhttp://jsperf.com/contains-vs-parentnode
、私もnode.parentNode
JavaScriptの実行を高速化しようとしている場合、これは大きな違いはありません。最初にプロファイリング作業を行い、実際に遅いものがあるかどうかを確認する必要があります。 parent()を100回呼び出しても、ミリ秒かかることはありません。 –
@Mike、それはメソッドを呼び出す必要がある頻度に依存します。 – kpozin