Как узнать содержит ли 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, время: 04:34. |