2010-09-17 93 views
19

類的變化是否有jQuery的方式來偵聽改變一個節點的類,然後對其採取一些行動,如果類變爲具體的類?具體來說,我使用jquery工具標籤插件的幻燈片和幻燈片正在播放時,我需要能夠檢測焦點何時在特定的選項卡/錨點,以便我可以取消隱藏特定的div。傾聽jQuery中

在我具體的例子,我需要知道什麼時候:

<li><a class="nav-video" id="nav-video-video7" href="#video7-video">Video Link 7</a></li> 

更改爲與類下面的「當前」補充說:

<li><a class="nav-video" id="nav-video-video7 current" href="#video7-video">Video Link 7</a></li> 

然後我要取消隱藏在那一個div時刻。

謝謝!

+1

此[問題]的任何屬性改變離子[1]的答案可以提供幫助。 [1]:http://stackoverflow.com/questions/6034161/how-can-i-detect-when-an-html-elements-class-changes – 2011-07-22 04:10:08

回答

2

這裏有一些其他的發現可能提供了一個解決方案:

  1. Most efficient method of detecting/monitoring DOM changes?
  2. How can I detect when an HTML element’s class changes?
  3. Monitoring DOM Changes in JQuery

而且因爲它是在2號建議,爲什麼不把current一添加了類,而不是ID,並使用以下CSS處理顯示/隱藏操作。

<style type='text/css> 
    .current{display:inline;} 
    .notCurrent{display:none;} 
</style> 

也許值得去看看.on() in jquery

+2

谷歌把我帶到這裏。我查看了「.on()」,但不清楚在將類添加到元素時可能觸發哪個事件。我處於與OP相似的狀態,需要在添加類時觸發,但由於插件在click事件中調用preventDefault,所以無法綁定到原始的單擊事件。 – 2012-11-14 18:03:48

+0

自從我發佈這個問題已經有一段時間了,坦率地說,我忘了我是如何處理它的。使用CSS來隱藏/取消隱藏div將是顯而易見的解決方案,但我確信我必須有一些額外的事情正在進行,這使我無法保持這種簡單。無論如何,我選擇了@jsuar解決方案,因爲它包含了一些有用的鏈接。 – Snazawa 2013-07-29 00:11:05

0

有了這樣的事,你有兩個基本的選擇,回調或輪詢。

既然你可能無法得到一個事件時,DOM這樣變異(可靠地跨所有平臺),你可能不得不求助於輪詢被觸發。爲了更好地瞭解它,你可以嘗試使用requestAnimationFrame api,而不是僅僅使用像setInterval這樣的東西。

以最基本的做法(即使用setInterval的假設jQuery的),你可以嘗試這樣的事:

var current_poll_interval; 
function startCurrentPolling() { 
    current_poll_interval = setInterval(currentPoll, 100); 
} 
function currentPoll() { 
    if ($('#nav-video-7').hasClass('current')) { 
    // ... whatever you want in here ... 
    stopCurrentPolling(); 
    } 
} 
function stopCurrentPolling() { 
    clearInterval(current_poll_interval); 
} 
20

可以綁定DOMSubtreeModified事件。我在這裏補充一個例子:

HTML

<div id="mutable" style="width:50px;height:50px;">sjdfhksfh<div> 
<div> 
    <button id="changeClass">Change Class</button> 
</div> 

的JavaScript

$(document).ready(function() { 
    $('#changeClass').click(function() { 
    $('#mutable').addClass("red"); 
    }); 

    $('#mutable').bind('DOMSubtreeModified', function(e) { 
     alert('class changed'); 
    }); 
}); 

http://jsfiddle.net/hnCxK/13/

0

研究之後,最好的答案,我發現是這樣的jQuery插件在this SO answer中給出它綁定偵聽器函數的地方上的HTML元素