Определите, есть ли выбор JQuery в DOM - PullRequest
2 голосов
/ 14 января 2011

У меня есть выборка jQuery, которая возникла как вновь созданный элемент (например, $("<div/>")) и не имеет родителя, или фактически является элементом в DOM.

Какой самый эффективный способ определить, является лиили нет выбранный элемент на самом деле находится в текущем дереве DOM?

Одна возможность - вызвать .parent(), но я подозреваю, что есть более эффективный способ.

Ответы [ 4 ]

4 голосов
/ 14 января 2011

Идея попросить .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

2 голосов
/ 14 января 2011

Я понял, что мой вопрос и решение Энди (используя 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;
}
0 голосов
/ 14 января 2011

Изучите метод индекса jQuery .

Что-то вроде $(yourDiv).index('body div') может многое вам рассказать.

0 голосов
/ 14 января 2011

Дайте вновь созданному элементу идентификатор и запросите идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...