DOM.SubtreeModified不会触发$ .hide()和$ .show()

时间:2012-02-28 19:09:45

标签: javascript jquery dom javascript-events

jsfiddle example link

似乎jQuery $.hide()$.show()不修改DOM来隐藏/显示元素,因此不会触发DOMSubtreeModified事件。如何在DOM上的任何元素上捕获这类事件?

感谢。

更新 该代码不适用于Chrome16 Ubuntu。最初,我需要针对基于Webkit的QT浏览器。

2 个答案:

答案 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)重新组织你思考问题的方式......

希望这有助于确认