DOMSubtreeModified не запускается для $ .hide () и $ .show () - PullRequest
2 голосов
/ 28 февраля 2012

Пример ссылки jsfiddle

Похоже, jQuery $.hide() и $.show() не изменяют DOM, чтобы скрыть / показать элемент, и, следовательно, не делаютпожар DOMSubtreeModified событие.Как я могу захватить подобные события на любом элементе DOM?

Спасибо.

ОБНОВЛЕНИЕ: Код не работает в Chrome16 Ubuntu.Изначально мне нужно использовать браузер QT, основанный на Webkit.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

вы правы, DOMSubtreeModified предназначен только для модификаций , поэтому у вас есть несколько вариантов:

1) используйте DOMAttrModified, который имеет такую ​​же плохую, если не худшую поддержку, как DOMSubtreeModified

2) переопределить методы .hide() и .show() в jQuery, чтобы вы могли перехватывать любые вызовы и отвечать на них:

var oldShow = $.fn.show;
$.fn.show = function(args) {
    alert('showing!');
    oldShow.apply(this, arguments);
};
// do the same for .hide()

3) запустить какой-то «монитор» в цикле (например, setInterval()), просматривая видимые числа детей или что-то, что влияет на

4) реорганизовать способ мышления о проблеме ...

надеюсь, это поможет -ck

2 голосов
/ 28 февраля 2012

Ваш пример JSFiddle работает для меня в Chrome 17. Я считаю, что ваша проблема связана с поддержкой браузера.Я не уверен в точной поддержке браузера, но не все браузеры поддерживают событие DOMSubtreeModified.Я знаю, что DOMSubtreeModified не поддерживается в IE8.

И .hide() / .show() изменяют атрибут elements style, добавляя display:none / display:(block|list-item|etc.)

Update

Я рекомендую вызвать пользовательское событие для элемента, который вы изменяете, а затем прослушать это событие:

//register event handler
$(document).on('customDOMAltered', function (event) {
    console.log(event.target);
});

//alter DOM element
$('#some-element').hide().trigger('customDOMAltered');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...