0

我有一个看起来像这样的列表:

<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>

当项目从关闭更改为打开类更改时,我想获得一个事件,例如,如果发生以下情况:

 <li class="variant off">red</li>
 <li class="variant on">blue</li>

为此,我尝试使用 livequery,但无法获取事件或设置正确。

$('#colors li.on').livequery(function(){ 
                             console.log(this.text())
                          });
4

2 回答 2

2

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

于 2013-05-05T14:11:59.850 回答
1

一个丑陋的方法是在运行 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);
  }
}());

另一种方式是MutationObserver目前仅受 Chrome、Firefox 和 Safari 支持。

于 2013-05-05T14:12:35.983 回答