Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   трекинг нахождения эл-та в DOM (https://javascript.ru/forum/jquery/12219-treking-nakhozhdeniya-ehl-ta-v-dom.html)

OKleg 07.10.2010 14:27

трекинг нахождения эл-та в DOM
 
Есть некоторая jquery-коллекция
var $collection = $('...');

На нее замкнута ф-ия
function someFunc(){ ... $collection ... }

Каким-то сторонним способом отдельные элементы этой коллекции могут удаляться из DOM, причем это озночает, что они теряют смысл.

Вопрос: какой наилучший способ вовремя в этой коллекции удалять неактуальные элементы?

Варианты, которые мне не нравятся.
Вариант 1.
В коде, которыейможет удалять эл-ты, при удалении trigger'ить событие, озночающее удаление, а в someFunc вешать обработчик на это событие.
Чем не нравится: удаляться эл-ты могут и не в одном месте, везде надо прописывать событие; если эл-тов много, то вешать на все обработчик, накладно по ресурсам.
Вариант 2.
При помощи setInterval каждые N миллисекунд проверять каждый эл-т коллекции на
$collection.eq(i).closest("body").length > 0

Sweet 07.10.2010 15:04

В dom'е есть динамические коллекции - nodeList'ы. Их возвращает метод getElementsByTagName.
Я, честно говоря, не знаток сего вопроса. Могу лишь дать код для размышления:
<script src = "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type = "text/javascript"></script>
<div>Text</div>
<div>Another text</div>
<script>
// Берем 2 коллекции элементов разными способами
var jQuery = $("div"),
    getElements = document.getElementsByTagName('div');
alert('Количество элементов в коллекциях:\njQueryCollection: ' + jQuery.length + '\ngetElementsByTagNameCollection: ' + getElements.length);

// Удаляем один из элементов
var div = document.getElementsByTagName('div')[0];
div.parentNode.removeChild(div);

// Метод .getElementsByTagName оказался динамическим
alert('Новое количество элементов в коллекциях:\njQueryCollection: ' + jQuery.length + '\ngetElementsByTagNameCollection: ' + getElements.length);
</script>

Sweet 07.10.2010 15:48

Кроме того, у каждого элементов есть свойство children, которое также является динамической HTML-коллекцией. Можно использовать это следующим образом:
<div id="cont">
  <div>Text</div>
  <div id="toKill">Another text</div>
</div>
<script>
var elements = document.getElementById('cont').children;
alert('Количество элементов в коллекции: ' + elements.length);
var div = document.getElementById('toKill');
div.parentNode.removeChild(div);
alert('Количество элементов в коллекции: ' + elements.length);
</script>


Часовой пояс GMT +3, время: 00:04.