2011-11-21 13 views
5

क्या वेबकिट (क्रोम) में 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

तो, अगर मैं ठोस वस्तु को जानता हूं तो गेटटर को ओवरराइड करने का कोई तरीका होगा? – Erik

+0

आपको एक ही समय में इसे लक्षित करने वाले व्यक्तिगत तत्वों पर एक करना होगा। 'ऑब्जेक्ट.डेफिनप्रोपर्टी (myDiv, "classList", ... ' – gilly3

संबंधित मुद्दे