IE列表方法的替代方案?

时间:2013-04-24 14:20:20

标签: javascript list internet-explorer method-missing

我正在寻找一种在Internet Exploder 7-9中执行node.classList.contains("foo")的方法,而无需重构代码的主要部分。所有其他浏览器(甚至IE10)都有此方法。

我找到了Code with classList does not work in IE?,但我不明白如何使用它来替换{​​{1}}方法。

我已经有了代码,让我只为某些浏览器运行隔离代码,所以给IE一些额外或不同的代码不是问题。

有没有办法通过.contains()的原型或其他方便的方式添加所述方法来使用classList

1 个答案:

答案 0 :(得分:4)

这是不可能的。

乍一看,如果它已经不存在,您可能已经认为自己可以将自己的classList实施修补到HTMLElement;

if (!("classList" in document.createElement("div"))) {
    HTMLElement.prototype.classList = {
        contains: function () {

        }
    };
}

然而:

  1. 您的contains实施无法访问DOMElement(thisclassList对象,而不是元素
  2. 在较旧的IE just doesn't work中扩展DOM对象。

  3. 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)代替。