确定jQuery选择是否在DOM中

时间:2011-01-13 21:49:54

标签: javascript jquery dom

我有一个jQuery选择,它或者起源于一个新创建的元素(例如$("<div/>"))并且没有父元素,或者实际上是DOM中的一个元素。

确定所选元素是否实际位于当前DOM树中的最有效方法是什么?

一种可能性是拨打.parent(),但我怀疑这是一种更有效的方式。

4 个答案:

答案 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)

查看jQuery index method

$(yourDiv).index('body div')之类的东西可以告诉你很多。

答案 3 :(得分:-1)

为新创建的元素提供ID并查询ID。