Как узнать содержит ли DOM определенный элемент
К примеру с дереве есть элемент, мы получаем на него ссылку, затем заменяем содержимое его пра-родителя.
<div id="content">
<div>
<div id="bingo">Bingo</div>
</div>
</div>
Скрипт
var bingo = document.getElementById('bingo');
var content = document.getElementById('content');
content.innerHTML = '<div><div id="bingo">Bingo 2</div></div>';
Как оптимально узнать что DOM не содержит элемент bingo? можно использовать проверку наличия родителей bingo.parentNode, но при большой вложенности это будет не оптимально. |
так вроде он у вас опять его содержит
content.innerHTML = '<div><div id="bingo">Bingo 2</div></div>'; |
content содержит уже новый элемент, но с таким же ИД, т.е. проверить старый элемент через ИД не получится
|
так вызовите снова метод getElementById
он вернет ссылку на новый уже элемент только учтите, что на странице в один момент должен быть только один эдлемент с опредленным id |
да, такой вариант возможен, вызов getElementById для получения нового элемента, после чего сравнить старый с новым и принять решение о содержании в DOM старого элемента.
Но этот вариант будет работать только в случае с ИД, а если у элемента нет заранее известного ИД, и ссылка на него была получена методом навигации по DOM Может еще какие варианты имеются? |
Че-то я не совсем понял.
Ну, через id не получится. Если у старого и нового bingo содержимое отличается, можно по нему проверить. Если ссылку через id не получить, то наверн так же методом навигации ее искать.
<body>
<div id="content">
<div>
<div id="bingo">Bingo</div>
</div>
</div>
</body>
<script>
alert(document.getElementById('bingo').childNodes[0].data);//Bingo
var bingo = document.getElementById('bingo');
//alert(bingo.childNodes[0].data);// Bingo
var content = document.getElementById('content');
content.innerHTML = '<div><div id="bingo">Bingo 2</div></div>';
alert(document.getElementById('bingo').childNodes[0].data);//Bingo 2
</script>
|
<html>
<head>
</head>
<body>
<div id="content">
<div>
<div id="bingo">Bingo</div>
</div>
</div>
<script type="text/javascript">
// В FF нет contains, нужно сделать
if (window.Node && Node.prototype && !Node.prototype.contains)
{
Node.prototype.contains = function (arg) {
return !!(this.compareDocumentPosition(arg) & 16)
}
}
var bingo = document.getElementById('bingo');
var content = document.getElementById('content');
alert(document.contains(bingo));
content.innerHTML = '<div><div id="bingo">Bingo 2</div></div>';
alert(document.contains(bingo));
</script>
</body>
</html>
http://www.quirksmode.org/dom/w3c_core.html#t111 |
да! похоже это именно то что я искал. премного благодарен!
добавлю сюда прямую ссылку на оригинальное решение http://www.quirksmode.org/blog/archi...ns_for_mo.html |
правильно использовать document.body.contains(bingo) иначе в ИЕ ошибка
|
| Часовой пояс GMT +3, время: 14:04. |