2011-11-21 107 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