2017-01-02 1 views
8

JavaScriptで属性値の変更をリッスンすることはできますか?たとえば:JavaScript:属性の変更をリッスンしますか?

var element=document.querySelector('…'); 
element.addEventListener(? ,doit,false); 

element.setAttriubte('something','whatever'); 

function doit() { 

} 

私はsomething属性内の任意の変化に対応したいと思います。

私はMutationObserverオブジェクトとその代替案(アニメーションイベントを使用するものを含む)について読んでいます。私が知る限りでは、実際のDOMの変更に関するものです。私は、特定のDOM要素の属性の変更にもっと関心があるので、そうは思わない。確かに私の実験ではうまくいかないようです。

jQueryなしでこれを行いたいと思います。あなたがMutationObserverが必要

おかげ

+0

'を変更するシミュレートするsetTimeoutを使用しています。属性の変更を聞くように設定するだけです。あなたが興味のある要素だけを観察するように設定してください。 – Xufox

答えて

14

は、ここでスニペットで私はそのために働くMutationObserver`属性

var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; 
 

 
var element = document.querySelector('#test'); 
 
setTimeout(function() { 
 
    element.setAttribute('data-text', 'whatever'); 
 
}, 5000) 
 

 
var observer = new MutationObserver(function(mutations) { 
 
    mutations.forEach(function(mutation) { 
 
    if (mutation.type == "attributes") { 
 
     console.log("attributes changed") 
 
    } 
 
    }); 
 
}); 
 

 
observer.observe(element, { 
 
    attributes: true //configure it to listen to attribute changes 
 
});
<div id="test"> 
 
</div>

+0

答えとサンプルをありがとう。これを合理化したら、単純に変更して属性を変えるだけで、要素の複雑な変更を行うための優れたテクニックになると思います。より簡単なAPIになります。プリミティブなブラウザのための妥当なポリフィルを知っていますか? – Manngo

+0

@Manngo、プリミティブブラウザでは、[Mutation events](https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events)を使用して、https://davidwalsh.name/ dom-events-javascript – Satpal

+0

私は現在IE9に対応しており、現代のブラウザでもサポートされていることがわかります。再度、感謝します。 – Manngo

関連する問題