2014-07-25 56 views
1

有什么方法可以检测何时从DOM元素中删除CSS类?检测DOM元素中的属性更改

我有一个<ul>,我需要捕获这个<ul class="open">open类被删除。

任何方式或角度jQuery的

+1

人取出的CSS类? –

+0

几年前,它看起来像一个类似的问题。我想知道现在是否有新的信息。 http://stackoverflow.com/questions/4561845/firing-event-on-dom-attribute-change – nwalton

+0

只是为了澄清:你可以改变(我想)的脚本,删除'开放'类?或者你只能看DOM? – Polmonite

回答

1

如果你在谈论的监测,当类属性被任何人修改它从没有任何帮助更改为做到这一点,那么这样做的唯一方法是:

  1. 与CSS(其中当一个类被删除的CSS样式会自动更改)

  2. 完全解决你的问题,一个MutationObserver(在现代浏览器只),在那里你可以注册一个兴趣在那个特定的属性改变。不幸的是,MutationObservers没有在IE支持前IE 11

如果你是更具体的了解你想要什么来完成和/或哪些代码正在改变类名,那么我们也许可以提供一些其他也有想法。

1

你可以写这个

app.directive("isNotOpen", function(){ 
    var linkFunction = function(scope, element, attrs){ 
     scope.$watch(
     function() { 
      return element.attr('class'); 
     }, function(){ 
     if(!element.hasClass("open")){ 
      scope.$eval(scope.isNotOpen) 
     } 
     }); 
    }; 

    return { 
    link: linkFunction 
    scope: {isNotOpen: '&'} 
    } 
}) 

定制指令,你可以使用像下面

<div class="open" is-not-open="dosomething()"> 
1

你可以用这样的指令$watch类属性:

.directive('watchClass', function() { 
    return function(scope, element, attrs) { 
     scope.$watch(function() { 
      return attrs['class']; // Or element.attr('class'); 
     }, function(newValue, oldValue) { 
      // Check for open class removal and do something 
     }); 
    }; 
}); 

然后将该指令应用于您的元素。

<ul class="open" watchClass> 

(注:有什么比别的角度折磨你的DOM听起来怪我)

+0

我想知道如果属性被'$ attr。$ set()'以外的东西改变了,'attrs ['class']'会被更新吗? – runTarm

+1

我不得不将它更改为'return element.attr('class');'以使其起作用。 – core