2016-02-01 50 views
1

我想切換元素的懸停事件上的類。我有代碼是toggleClass不會切換類

 var el = $('[model-id="' + node.id + '"]'); 

     el.hover(
      function() { 
       $(this).toggleClass("myClass"); 
       console.log("in",this.getAttribute("class")) 
      }, 

      function() { 
       $(this).toggleClass("myClass"); 
       console.log("out",this.getAttribute("class")) 
      } 
     ) 

我有鉻元素工具標籤頁中打開,我期待在DOM。

當我將鼠標懸停在元素,我得到的消息

in element Node basic 

,當我離開的元素,我得到

out element Node basic 

,所以你可以在「在」事件看,我獲取適當的元素,並添加「myClass」類。但是,這並不是在監察員身上出現的。

我錯過了什麼?它必須是明顯的;)

+4

請發送完整的代碼示例。 – j08691

+0

你可以編輯你的問題,並使用代碼片段功能添加一個工作示例?或者你可以使用[JSFiddle](https://jsfiddle.net/)製作一個。 –

+0

當您在dom檢查器中查看時,是否處於懸停狀態?我知道你可以在Chrome上檢查,並且我知道我自己親自忘記了這一點。 =) – Nikki9696

回答

0

你的代碼很好..你可以使用hasClass來查看元素是否有類。看到這個fiddle

el.hover(
    function() { 
     $(this).toggleClass("myClass"); 
     console.log("in",$(this).hasClass("myClass")) 
    }, 

    function() { 
     $(this).toggleClass("myClass"); 
     console.log("out",$(this).hasClass("myClass")) 
    } 
) 

如果你真的想要得到這個類,而不僅僅是測試它被添加了。那麼你可以使用$(this).attr("class")

+0

使用hasClass返回 in false out false – jmls

+0

爲什麼不使用addClass/removeClass?我不明白你的代碼中toggleClass的意義。你知道你的元素將會處於的確切狀態(開/關)。只需刪除jquery的魔法,並自己切換。儘可能排除隨機性。你甚至可以直接去javascript沒有jQuery。我的懷疑是「這個」不是你認爲的那樣。 – Puzzle84

0

所以事實證明,我試圖添加一個類的元素是在一個SVG標籤。根據jQuery SVG, why can't I addClass?,這不起作用。

答案是要麼使用jQuery3或使用班級列表對象

this.classList.add('myClass'); 

確實改變DOM

希望這可以幫助別人尋找解決一個奇怪的問題!