2011-11-21 105 views
5

是否可以重寫WebKit(Chrome)中的HTMLElement.classList屬性?覆蓋HTMLElement.classList屬性

我用下面的代碼嘗試:

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

但是,調用一個DIV的classList仍然會返回DOMTokenList。

+1

我不知道你是否動態地創建div,但如果是這樣,你可以在返回元素之前覆蓋'document.createElement'並在創建的元素上定義'classList'。 – pimvdb

回答

2

我猜你應該做你已經與HTMLDivElement,不HTMLElement做了什麼。但是,我做到了,仍然沒有結果。

但是,如果你想要做你的那一刻的工作,你可以直接在div實例本身應用代碼:

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

和:

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

看到這個fiddle

3

您的div沒有從原型獲得classList。它是div的直接屬性。原型鏈是從來沒有搜索:

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

那麼,如果我知道具體對象,是否有辦法重寫getter? – Erik

+0

您必須每次只執行一次,針對您要定位的各個元素。 'Object.defineProperty(myDiv,「classList」,...' – gilly3