2017-01-02 8 views
8

Возможно ли в JavaScript прослушать изменение значения атрибута? Например:JavaScript: Прослушать изменение атрибута?

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

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

function doit() { 

} 

Я хотел бы ответить на любые изменения атрибута something.

Я прочитал объект MutationObserver, а также альтернативы этому (в том числе тот, который использует анимационные события). Насколько я могу судить, речь идет об изменениях в реальном DOM. Меня больше интересуют изменения атрибутов для конкретного элемента DOM, поэтому я не думаю, что это так. Конечно, в моих экспериментах это не работает.

Я хотел был бы это сделать без jQuery.

Благодаря

+0

'MutationObserver' работает для этого. Просто настройте его для прослушивания изменений атрибутов. Установите для наблюдения только интересующий вас элемент. – Xufox

ответ

14

Вам нужно MutationObserver, здесь во фрагменте кода я использовал setTimeout для имитации атрибуту модифицирующих

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