2011-11-21 34 views
5

Có thể ghi đè thuộc tính HTMLElement.classList trong WebKit (Chrome) không?Ghi đè thuộc tính HTMLElement.classList

tôi đang cố gắng với đoạn mã sau:

Object.defineProperty(window.HTMLElement.prototype, "classList", { 
     get : function() { 
      console.log("test"); 
      return 1; 
     }, 
     set : function(newValue){ }, 
     enumerable : true, 
     configurable : true} 
    ); 

Tuy nhiên, gọi classList của một DIV vẫn sẽ trả lại DOMTokenList.

+1

Tôi không biết liệu bạn có đang tạo div động hay không, nhưng nếu có, bạn có thể ghi đè 'document.createElement' và xác định' classList' trên phần tử đã tạo trước khi trả về phần tử. – pimvdb

Trả lời

2

Tôi đoán bạn nên làm những gì bạn đã làm với HTMLDivElement, không HTMLElement. Tuy nhiên, tôi đã làm điều đó và vẫn không có kết quả.

Nhưng nếu bạn muốn làm công việc của bạn cho thời điểm này, bạn có thể áp dụng mã của bạn trực tiếp trên div dụ bản thân:

<div id='target' class='first second third'> 
</div> 

và:

var div = document.getElementById('target'); 
Object.defineProperty(div, 'classList', { 
    get: function(){ 
     return 'overridden'; 
    } 
}); 
alert(div.classList); 

Xem fiddle này.

3

Div của bạn không nhận được classList từ nguyên mẫu. Nó là tài sản trực tiếp của div. Chuỗi nguyên mẫu không bao giờ tìm kiếm:

myDiv.hasOwnProperty("classList"); // returns true 
+0

Vì vậy, sẽ có một cách để ghi đè lên getter nếu tôi biết các đối tượng cụ thể? – Erik

+0

Bạn sẽ phải thực hiện từng bước một, trên từng phần tử bạn đang nhắm mục tiêu. 'Object.defineProperty (myDiv," classList ", ...' – gilly3

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