2013-11-09 125 views
1

我正在使用不想修改的第三方腳本。使用Javascript監聽功能

在這個腳本中,我需要偵聽的函數向dom節點添加一個類。

function _showElement(targetElement) { 
     targetElement.element.className += 'this-class'; 
    } 

我想這樣做是偵聽要叫這個元素,只要它確實增加了一類其父與純JavaScript。

function addThis() { 
    var doc = document; 
    liveEl = doc.getElementsByName("this-class"); 
    // Code to add class to parent 
} 

回答

1

最簡單的「蠻力」解決方案是劫持(重新)功能:

function _showElement(targetElement) { 
    console.log('original'); 
} 

_showElement(); // hijacked 


function _showElement(targetElement) { 
    console.log('hijacked'); 
} 

不幸的是,我不認爲你可以保存功能的原始行爲,所以你需要複製粘貼它:

function _showElement(targetElement) { 
    targetElement.element.className += 'this-class'; 
    addThis() 
} 

另一種解決方案,更具體的您的問題(做某事時的一個要素的變化類名),你可以聽對DOM突變事件:

https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

基本上你創建一個MutationObserver並觀察元素的屬性變化。如果您需要跟蹤所有節點,它可能不是一個很好的解決方案,但在某些情況下它可能派上用場。

+0

你完全可以保存原件,然後在修改過的函數中調用它。 http://jsfiddle.net/LordDaimos/2Ma72/ –

0

你不能直接這樣做。您不能聽像dom屬性更改一樣的事件。但是,有一種方法可以識別觸發_showElement的事件,並將另一個處理程序附加到應調用addThis函數的事件。