2014-07-25 55 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