2017-01-02 17 views
8

Có thể trong JavaScript để nghe thay đổi giá trị thuộc tính không? Ví dụ:JavaScript: Nghe thay đổi thuộc tính?

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

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

function doit() { 

} 

Tôi muốn để đối phó với bất kỳ sự thay đổi trong các thuộc tính something.

Tôi đã đọc lên đối tượng MutationObserver, cũng như các lựa chọn thay thế cho đối tượng đó (bao gồm cả đối tượng sử dụng sự kiện hoạt ảnh). Theo như tôi có thể nói, chúng là về những thay đổi đối với DOM thực tế. Tôi quan tâm nhiều hơn đến các thay đổi thuộc tính đối với một phần tử DOM cụ thể, vì vậy tôi không nghĩ đó là điều đó. Chắc chắn trong thử nghiệm của tôi nó dường như không hoạt động.

Tôi muốn làm điều này mà không cần jQuery.

Cảm ơn

+0

'MutationObserver' làm việc cho điều đó. Chỉ cần cấu hình nó để nghe các thay đổi thuộc tính. Đặt nó để chỉ quan sát yếu tố bạn quan tâm. – Xufox

Trả lời

14

Bạn cần MutationObserver, đây trong đoạn tôi đã sử dụng để mô phỏng setTimeout sửa đổi thuộc tính

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

Cảm ơn câu trả lời và cho mẫu. Khi tôi đã sắp xếp hợp lý điều này, tôi nghĩ rằng đó sẽ là kỹ thuật tốt để thực hiện các thay đổi phức tạp hơn cho các phần tử bằng cách thay đổi và chỉ định thuộc tính. Nó làm cho một API dễ dàng hơn. Bạn có biết về một polyfill hợp lý cho các trình duyệt nguyên thủy không? – Manngo

+0

@Manngo, Đối với các trình duyệt nguyên thủy, bạn có thể sử dụng [Sự kiện đột biến] (https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events) và cũng xem https://davidwalsh.name/ dom-events-javascript – Satpal

+0

Tôi thấy rằng nó hiện đang được hỗ trợ trở lại IE9 và vẫn được hỗ trợ trong các trình duyệt hiện đại. Cảm ơn một lần nữa. – Manngo

Các vấn đề liên quan