检测DOM元素中的属性更改

时间:2014-07-25 15:51:14

标签: javascript css angularjs events dom

有没有办法检测何时从DOM元素中删除CSS类?

我有一个<ul>,我需要在<ul class="open">移除open类时捕获。

任何在Angular或jQuery中执行此操作的方法

3 个答案:

答案 0 :(得分:1)

如果您正在讨论监视类属性何时更改而没有任何修改它的帮助,那么唯一的方法是:

  1. 完全使用CSS解决您的问题(删除类时CSS样式会自动更改)

  2. 使用MutationObserver(仅限现代浏览器中),您可以注册对该特定属性更改的兴趣。不幸的是,在IE 11之前的IE中不支持MutationObservers。

  3. 如果您更具体地了解您正在尝试完成的内容和/或正在更改类名的代码,那么我们可能也会提供其他一些想法。

答案 1 :(得分: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()">

答案 2 :(得分:1)

您可以$watch使用如下指令的class属性:

.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之外的其他任何东西听起来都很奇怪)