我正在寻找一种在Internet Exploder 7-9中执行node.classList.contains("foo")
的方法,而无需重构代码的主要部分。所有其他浏览器(甚至IE10)都有此方法。
我找到了Code with classList does not work in IE?,但我不明白如何使用它来替换{{1}}方法。
我已经有了代码,让我只为某些浏览器运行隔离代码,所以给IE一些额外或不同的代码不是问题。
有没有办法通过.contains()
的原型或其他方便的方式添加所述方法来使用classList
?
答案 0 :(得分:4)
这是不可能的。
乍一看,如果它已经不存在,您可能已经认为自己可以将自己的classList
实施修补到HTMLElement
;
if (!("classList" in document.createElement("div"))) {
HTMLElement.prototype.classList = {
contains: function () {
}
};
}
然而:
contains
实施无法访问DOMElement(this
是classList
对象,而不是元素 only 选项是用您自己的包装函数替换classList
的所有用法,该函数使用classList
功能(如果可用),并回退到您自己的实现如果没有。
var classListWrapper = (function () {
if ("classList" in document.createElement("div")) {
return {
add: function (el, class) {
el.className.add(class);
},
remove: function (el, class) {
el.className.remove(class);
},
// etc.
}
} else {
return {
add: function (el, class) {
el.className += ' ' + class;
},
remove: function (el, class) {
el.className = (' ' + el.className + ' ').replace(' ' + class + ' ', ' ');
},
// etc.
};
}
}());
...然后在您的代码中使用classListWrapper.add(element, class)
代替。