2011-11-21 2 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} 
    ); 

을하지만, 여전히 DOMTokenList를 반환 할 것 DIV의 classList를 호출.

+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

귀하의 사업부는 classList을 프로토 타입에서 가져 오지 못합니다. 그것은 div의 직접적인 재산입니다. 프로토 타입 체인은 검색되지 않습니다 :

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

구체적인 객체를 안다면 getter를 오버라이드 할 수있는 방법이 있을까요? – Erik

+0

한 번에 하나씩, 개별 요소를 대상으로해야합니다. 'Object.defineProperty (myDiv, "classList", ...' – gilly3