Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.03.2010, 10:38
Интересующийся
Отправить личное сообщение для Ruslan Посмотреть профиль Найти все сообщения от Ruslan
 
Регистрация: 23.12.2009
Сообщений: 21

Как узнать содержит ли 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, но при большой вложенности это будет не оптимально.
Ответить с цитированием
  #2 (permalink)  
Старый 11.03.2010, 11:10
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,125

так вроде он у вас опять его содержит
content.innerHTML = '<div><div id="bingo">Bingo 2</div></div>';
Ответить с цитированием
  #3 (permalink)  
Старый 11.03.2010, 11:14
Интересующийся
Отправить личное сообщение для Ruslan Посмотреть профиль Найти все сообщения от Ruslan
 
Регистрация: 23.12.2009
Сообщений: 21

content содержит уже новый элемент, но с таким же ИД, т.е. проверить старый элемент через ИД не получится
Ответить с цитированием
  #4 (permalink)  
Старый 11.03.2010, 11:26
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,234

так вызовите снова метод getElementById
он вернет ссылку на новый уже элемент
только учтите, что на странице в один момент должен быть только один эдлемент с опредленным id
Ответить с цитированием
  #5 (permalink)  
Старый 11.03.2010, 11:32
Интересующийся
Отправить личное сообщение для Ruslan Посмотреть профиль Найти все сообщения от Ruslan
 
Регистрация: 23.12.2009
Сообщений: 21

да, такой вариант возможен, вызов getElementById для получения нового элемента, после чего сравнить старый с новым и принять решение о содержании в DOM старого элемента.

Но этот вариант будет работать только в случае с ИД, а если у элемента нет заранее известного ИД, и ссылка на него была получена методом навигации по DOM

Может еще какие варианты имеются?
Ответить с цитированием
  #6 (permalink)  
Старый 11.03.2010, 11:38
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,125

Че-то я не совсем понял.
Ну, через 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>
Ответить с цитированием
  #7 (permalink)  
Старый 11.03.2010, 12:16
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

<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
Ответить с цитированием
  #8 (permalink)  
Старый 11.03.2010, 12:28
Интересующийся
Отправить личное сообщение для Ruslan Посмотреть профиль Найти все сообщения от Ruslan
 
Регистрация: 23.12.2009
Сообщений: 21

да! похоже это именно то что я искал. премного благодарен!

добавлю сюда прямую ссылку на оригинальное решение http://www.quirksmode.org/blog/archi...ns_for_mo.html
Ответить с цитированием
  #9 (permalink)  
Старый 12.03.2010, 22:02
Интересующийся
Отправить личное сообщение для Ruslan Посмотреть профиль Найти все сообщения от Ruslan
 
Регистрация: 23.12.2009
Сообщений: 21

правильно использовать document.body.contains(bingo) иначе в ИЕ ошибка
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать, что содержит onClick? PHPNoob Events/DOM/Window 3 17.07.2015 13:20
Как удалить элемент из дерева DOM dummer jQuery 13 16.01.2011 16:19
Как узнать, присутствует ли в окне полоса прокрутки или нет? возжаждавший Элементы интерфейса 6 12.03.2010 23:00
Как узнать, что DOM сформирован dmeet AJAX и COMET 1 10.08.2009 17:09
Как узнать имеет ли родительский элемент потомков? Sc@M Events/DOM/Window 2 29.08.2008 16:00