Javascript 如何知道类何时更改/添加到HTML元素?

Javascript 如何知道类何时更改/添加到HTML元素?,javascript,dom,jquery,Javascript,Dom,Jquery,我有一个如下列表: <ul id="colors"> <li class="variant on">red</li> <li class="variant off">blue</li> <li class="variant off">white</li> <li class="variant off">black</li> </ul> 这只有在支持该对象的现代浏览器中

我有一个如下列表:

<ul id="colors">
 <li class="variant on">red</li>
 <li class="variant off">blue</li>
 <li class="variant off">white</li>
 <li class="variant off">black</li>
</ul>

这只有在支持该对象的现代浏览器中才可能实现。否则,您将无法直接观察DOM更改。您可以编写一些自动引发事件的
addClass
函数拦截器,但我不建议这样做。你想要达到的是非常糟糕的设计您不应该依赖DOM来跟踪应用程序状态

这只有在支持对象的现代浏览器中才可能实现。否则,您将无法直接观察DOM更改。您可以编写一些自动引发事件的
addClass
函数拦截器,但我不建议这样做。你想要达到的是非常糟糕的设计您不应该依赖DOM来跟踪应用程序状态

一种丑陋的方法是在运行jQuery实现之前,用您的一些中间函数修补jQuery函数。您可以在
addClass
removeClass
上运行中间代码

例如,修补
addClass
。我们采用原始的
addClass

jQuery.fn.addClass = (function(){
  var addClass = jQuery.fn.addClass;
  return function(){
    //do stuff here before running the original addClass
    //you could collect callbacks and run them here
    return addClass.apply(this,arguments);
  }
}());

另一种方法是目前只有Chrome、Firefox和Safari支持的方法。

一种丑陋的方法是在运行jQuery的实现之前,用您的一些中间函数修补jQuery函数。您可以在
addClass
removeClass
上运行中间代码

例如,修补
addClass
。我们采用原始的
addClass

jQuery.fn.addClass = (function(){
  var addClass = jQuery.fn.addClass;
  return function(){
    //do stuff here before running the original addClass
    //you could collect callbacks and run them here
    return addClass.apply(this,arguments);
  }
}());

另一种方法是,目前只支持Chrome、Firefox和Safari。

livequery不是jquery函数。livequery()不包含在jquery 2.0.0livequery是我发现的唯一一个声明可以做到这一点的插件这是一个相当干净的方法:livequery不是jquery函数。live()未包含在jquery 2.0.0livequery中。livequery是我发现的唯一一个声明可以做到这一点的插件。这是一个相当干净的方法:你使用过livequery插件吗?@GuyKorland,没有,我从来没有使用过,但我很快就看了一眼,它不是这样做的。基本上,它的作用与在jQuery中将第二个选择器传递给
on
函数相同。我找到了这个答案,它似乎为不支持MutationObserver@GuyKorland的浏览器提供了解决方案,只是不要这样做。。。监听DOM更改以跟踪应用程序状态既丑陋又低效。。。除非你要写一个双向绑定feature@GuyKorland,有第三方脚本吗?您是否阅读了他们的文档以查看他们是否在这种情况下生成事件?第三方脚本是否使用jQuery?如果他们是,你可以尝试约瑟夫提议的实现。否则,您可以检查是否可以使用类似的方法来拦截由第三方脚本执行的操作。最后,如果没有
MutationObserver
,您可以使用
setInterval
setTimeout
定期检查DOM的更改。如果你知道是什么用户操作触发了这些更改,你也可以监听其他脚本监听的相同事件。你使用过livequery插件吗?@GuyKorland,没有,我从来没有这样做过,但我很快看了一眼,它并不是这样做的。基本上,它的作用与在jQuery中将第二个选择器传递给
on
函数相同。我找到了这个答案,它似乎为不支持MutationObserver@GuyKorland的浏览器提供了解决方案,只是不要这样做。。。监听DOM更改以跟踪应用程序状态既丑陋又低效。。。除非你要写一个双向绑定feature@GuyKorland,有第三方脚本吗?您是否阅读了他们的文档以查看他们是否在这种情况下生成事件?第三方脚本是否使用jQuery?如果他们是,你可以尝试约瑟夫提议的实现。否则,您可以检查是否可以使用类似的方法来拦截由第三方脚本执行的操作。最后,如果没有
MutationObserver
,您可以使用
setInterval
setTimeout
定期检查DOM的更改。如果您知道是什么用户操作触发了这些更改,那么还可以侦听其他脚本侦听的相同事件。
jQuery.fn.addClass = (function(){
  var addClass = jQuery.fn.addClass;
  return function(){
    //do stuff here before running the original addClass
    //you could collect callbacks and run them here
    return addClass.apply(this,arguments);
  }
}());