трекинг нахождения эл-та в DOM
Есть некоторая jquery-коллекция
var $collection = $('...');
На нее замкнута ф-ия
function someFunc(){ ... $collection ... }
Каким-то сторонним способом отдельные элементы этой коллекции могут удаляться из DOM, причем это озночает, что они теряют смысл. Вопрос: какой наилучший способ вовремя в этой коллекции удалять неактуальные элементы? Варианты, которые мне не нравятся. Вариант 1. В коде, которыейможет удалять эл-ты, при удалении trigger'ить событие, озночающее удаление, а в someFunc вешать обработчик на это событие. Чем не нравится: удаляться эл-ты могут и не в одном месте, везде надо прописывать событие; если эл-тов много, то вешать на все обработчик, накладно по ресурсам. Вариант 2. При помощи setInterval каждые N миллисекунд проверять каждый эл-т коллекции на
$collection.eq(i).closest("body").length > 0
|
В 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>
|
Кроме того, у каждого элементов есть свойство 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, время: 18:58. |