трекинг нахождения эл-та в 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, время: 00:04. |