日期:2014-05-16  浏览次数:20380 次

请问如何监听dom结构发生了改变?
变化包括:节点添加、修改(样式、文本改变)、移除。

<html>
<body>
<script>
setInterval(function() {
var div = document.createElement("div");
div.innerHTML = +new Date;
document.body.appendChild(div);
}, 5000);

/* TODO */
</script>
</body>
</html>


难道只能用计时器+遍历?一周后没有答案放到非技术区散分结贴。


谢谢关注。

------解决方案--------------------

还有清洁工 搞不定的js问题??

速度围观


------解决方案--------------------
人工制造事件模型。
创造一个MyEvent对象,用来存储所有自定义事件函数
格式像这样 MyEvent[dom元素的sid属性][事件名称如onappend]=[]这个数组里存入用自定义的addMyEvent函数添加的函数。
然后dom同addMyEvent添加事件的时候,如果有sid则直接添加事件,如果没有sid则sid = 某全局变量++,然后添加事件。
之后写一个addChild()函数,代替appendChild函数,同时执行MyEvent里面存储的函数。
虽说工作量大一些。。其实也不大。。


------解决方案--------------------
来围观清洁工大哥搞不定的问题.....

自己的一个想法:
变化包括:节点添加、修改(样式、文本改变)、移除。
把所有的变化自己管理起来, 通过自己的接口做这些操作, 那监听就简单了..
------解决方案--------------------
也想知道这个问题啊,

js遍历监听数量也不是个办法吧,假如替换一个节点应该就出不来了吧

如果只是appendChild或removeChild应该可以重新这个方法制造事件,可是innerHTML这玩意就拿他没办法了啊
------解决方案--------------------
http://img.myaspx.com/Images_Myaspx_CSDN/2011021207261019908.jpg
------解决方案--------------------
能控制所有源代码的话,设置全局标识,在改变dom结构的操作之后改变标识?
愚见。愚见。
------解决方案--------------------
在firebug的 HTML页里,对一个dom点右键可以
break on attribute change
break on Child add/remove
break on element remove
这三个断点貌似包含了所有需求吧,可以把firebug解包看一下,里面都是js,说不定会有帮助
------解决方案--------------------
标准里边是定义有的这些事件  貌似浏览器都不支持 
mark.
------解决方案--------------------
dom 变化 是浏览器解释器自身控制的结构
只能通过模拟检控