我有一个jQuery选择,它或者起源于一个新创建的元素(例如$("<div/>")
)并且没有父元素,或者实际上是DOM中的一个元素。
确定所选元素是否实际位于当前DOM树中的最有效方法是什么?
一种可能性是拨打.parent()
,但我怀疑这是一种更有效的方式。
答案 0 :(得分:4)
要求.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
答案 1 :(得分:2)
我意识到我的问题和Andy的解决方案(使用node.parentNode
)都可以推广。这是一个适用于任何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;
}
答案 2 :(得分:0)
$(yourDiv).index('body div')
之类的东西可以告诉你很多。
答案 3 :(得分:-1)
为新创建的元素提供ID并查询ID。