Javascript.RU

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

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

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

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

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

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

В 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:14. Причина: Добавил комментарии в код
Ответить с цитированием
  #3 (permalink)  
Старый 07.10.2010, 15:48
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Кроме того, у каждого элементов есть свойство 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>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить элемент в XML через DOM используя PHP? bayah Серверные языки и технологии 6 11.08.2010 13:33
Где найти справочник методов DOM? master_alf Events/DOM/Window 6 16.04.2010 12:25
Вопрос о циклических ссылках (JavaScript -> Dom -> JavaScipt) BlueIce Events/DOM/Window 10 17.02.2010 21:58
Обращение к layer в DOM Asd Элементы интерфейса 2 01.07.2009 23:16
Сохранение дерева DOM в файл Александр1985 Общие вопросы Javascript 7 24.01.2009 23:15