Обнаружение действительного элемента DOM - PullRequest
1 голос
/ 27 ноября 2009

Когда я удаляю элемент DOM с помощью .removeChild (), ссылка на элемент по-прежнему возвращает его как действительный элемент:

var someNode = document.getElementById("someid");

if(someNode)
    alert('valid element');
else
    alert('invalid');

var p = document.getElementById('parent_id');
p.removeChild(someNode);


if(someNode)
    alert('valid element');
else
    alert('invalid');

Как до, так и после, я получаю "действительный" в окне предупреждения. Как удалить элемент DOM без этого? Я попробовал .remove () jQuery, но это было не лучше.

Ответы [ 4 ]

4 голосов
/ 27 ноября 2009

removeChild удаляет элемент dom из документа (как это делает jremery .remove ()). Поскольку вы храните ссылку на него в переменной someNode, браузер не будет собирать мусор, и вы все равно сможете ссылаться на элемент dom с помощью someNode. Вы даже можете вставить его в документ где-нибудь еще.

чтобы полностью удалить все ссылки на элемент dom, вам нужно сбросить someNode с помощью someNode = null; или попытаться повторно извлечь элемент из dom

0 голосов
/ 27 ноября 2009

Устанавливая someNode равным элементу, вы делаете его значение объектом, переопределяющим элемент. По сути, вы сохранили всю информацию об элементе в этой переменной. Поэтому, чтобы убрать его из переменной, вам нужно использовать someNode = undefined.

Хороший способ сделать это будет следующим:

if(p.removeChild(someNode){
    someNode = undefined;
}
0 голосов
/ 27 ноября 2009

Определить «действительный». Если вы имеете в виду «часть документа», то что-то вроде:

function isElementInDocument(element) {
    while (element = element.parentNode) {
        if (element === document) {
            return true;
        }
    }
    return false;
}

... должны сделать свое дело.

0 голосов
/ 27 ноября 2009

Сразу после удаления обновления узла

someNode = document.getElementById("someid");

и проверьте, верен ли он или нет. Объект создается в первый раз, и он будет сохраняться до тех пор, пока не будет выполнено обновление этой переменной. Обновленный DOM не будет виден переменной, если вы не обратитесь к нему снова.

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