我正在寻找一种在互联网爆炸者7-9中做node.classList.contains("foo")
的方法,而不需要重构我的代码的主要部分。此方法在所有其他浏览器(甚至是IE10)中都存在。
我已经找到了Code with classList does not work in IE?,但我不明白如何使用它来替换.contains()
方法。
我已经有了让我只在某些浏览器上运行隔离代码的代码,所以给IE一些额外的或不同的代码不是问题。
有没有一种方法可以通过classList
的原型添加上述方法,或者使用className
的其他方便方法?
发布于 2013-04-24 22:26:25
这是不可能的。
乍一看,您可能认为已经能够将自己的classList
实现修补到HTMLElement
中,如果它还不存在的话;
if (!("classList" in document.createElement("div"))) {
HTMLElement.prototype.classList = {
contains: function () {
}
};
}
但是:
在旧版IE .中,
contains
实现无法访问DOMElement (this
是classList
对象,而不是DOM对象您唯一的选择是用您自己的包装器函数替换所有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)
。
https://stackoverflow.com/questions/16194483
复制相似问题