IE 10 और 11 में, क्लासिस्ट संपत्ति को HTMLElement.prototype पर परिभाषित किया गया है।
एसवीजी-तत्वों पर काम करने के लिए इसे प्राप्त करने के लिए, संपत्ति को Element.prototype पर परिभाषित किया जाना चाहिए, जैसे कि यह अन्य ब्राउज़रों पर किया गया है।
एक बहुत छोटा फिक्स HTMLElement.prototype से Element.prototype के लिए सटीक प्रॉपर्टीस्क्रिप्ट की प्रतिलिपि बनाना होगा:
if (!Object.getOwnPropertyDescriptor(Element.prototype,'classList')){
if (HTMLElement&&Object.getOwnPropertyDescriptor(HTMLElement.prototype,'classList')){
Object.defineProperty(Element.prototype,'classList',Object.getOwnPropertyDescriptor(HTMLElement.prototype,'classList'));
}
}
- हमें डिस्क्रिप्टर की प्रतिलिपि बनाने की आवश्यकता है, क्योंकि
Element.prototype.classList = HTMLElement.prototype.classList
फेंक देंगेInvalid calling object
- पहला चेक ब्राउज़र पर संपत्ति को अधिलेखित करने से रोकता है जो समर्थन मूल रूप से है।
- दूसरा चेक 9 से पहले IE संस्करणों पर त्रुटियों को रोकता है, जहां HTMLElement अभी तक लागू नहीं किया गया है, और IE9 पर जहां क्लासिस्ट लागू नहीं है।
IE 8 और 9 के लिए, निम्न कोड का उपयोग करें, मैंने Array.prototype.indexOf के लिए एक (minified) पॉलीफ़िल भी शामिल किया है, क्योंकि IE 8 मूल रूप से इसका समर्थन नहीं करता है (polyfill source: Array.prototype.indexOf
Array.prototype.indexOf||(Array.prototype.indexOf=function (value,startIndex){'use strict';if (this==null)throw new TypeError('array.prototype.indexOf called on null or undefined');var o=Object(this),l=o.length>>>0;if(l===0)return -1;var n=startIndex|0,k=Math.max(n>=0?n:l-Math.abs(n),0)-1;function sameOrNaN(a,b){return a===b||(typeof a==='number'&&typeof b==='number'&&isNaN(a)&&isNaN(b))}while(++k<l)if(k in o&&sameOrNaN(o[k],value))return k;return -1});
Object.defineProperty(Element.prototype,'classList',{
get:function(){
var element=this,domTokenList=(element.getAttribute('class')||'').replace(/^\s+|\s$/g,'').split(/\s+/g);
if (domTokenList[0]==='') domTokenList.splice(0,1);
function setClass(){
if (domTokenList.length > 0) element.setAttribute('class', domTokenList.join(' ');
else element.removeAttribute('class');
}
domTokenList.toggle=function(className,force){
if (force!==undefined){
if (force) domTokenList.add(className);
else domTokenList.remove(className);
}
else {
if (domTokenList.indexOf(className)!==-1) domTokenList.splice(domTokenList.indexOf(className),1);
else domTokenList.push(className);
}
setClass();
};
domTokenList.add=function(){
var args=[].slice.call(arguments)
for (var i=0,l=args.length;i<l;i++){
if (domTokenList.indexOf(args[i])===-1) domTokenList.push(args[i])
};
setClass();
};
domTokenList.remove=function(){
var args=[].slice.call(arguments)
for (var i=0,l=args.length;i<l;i++){
if (domTokenList.indexOf(args[i])!==-1) domTokenList.splice(domTokenList.indexOf(args[i]),1);
};
setClass();
};
domTokenList.item=function(i){
return domTokenList[i];
};
domTokenList.contains=function(className){
return domTokenList.indexOf(className)!==-1;
};
domTokenList.replace=function(oldClass,newClass){
if (domTokenList.indexOf(oldClass)!==-1) domTokenList.splice(domTokenList.indexOf(oldClass),1,newClass);
setClass();
};
domTokenList.value = (element.getAttribute('class')||'');
return domTokenList;
}
});