似乎jQuery $.hide()
和$.show()
不修改DOM来隐藏/显示元素,因此不会触发DOMSubtreeModified
事件。如何在DOM上的任何元素上捕获这类事件?
感谢。
更新 该代码不适用于Chrome16 Ubuntu。最初,我需要针对基于Webkit的QT浏览器。
答案 0 :(得分:2)
您的示例JSFiddle在Chrome 17中适用于我。我相信您的问题是浏览器支持。我不确定确切的浏览器支持,但并非所有浏览器都支持DOMSubtreeModified
事件。我知道IE8不支持DOMSubtreeModified
。
并.hide()
/ .show()
更改元素style
属性,添加display:none
/ display:(block|list-item|etc.)
我建议在您更改的元素上触发自定义事件,然后侦听该事件:
//register event handler
$(document).on('customDOMAltered', function (event) {
console.log(event.target);
});
//alter DOM element
$('#some-element').hide().trigger('customDOMAltered');
答案 1 :(得分:2)
你是对的,DOMSubtreeModified
纯粹是为了修改,所以你有几个选择:
1)使用DOMAttrModified
,如果没有比DOMSubtreeModified
2)覆盖jQuery中的.hide()
和.show()
方法,以便捕获对它们的任何调用并做出响应:
var oldShow = $.fn.show;
$.fn.show = function(args) {
alert('showing!');
oldShow.apply(this, arguments);
};
// do the same for .hide()
3)在一个循环中运行某种“监视器”(例如setInterval()
),查看可见的子计数或影响的东西
4)重新组织你思考问题的方式......
希望这有助于确认