在IE8和其他带有javascript的浏览器中获取正文类的标准解决方案是什么

What is the standard solution to get body class at IE8 and other browsers with javascript

本文关键字:正文 获取 标准 是什么 解决方案 浏览器 其他 javascript IE8      更新时间:2023-09-26

我需要在 Internet Explorer 8 及更低版本上获取身体类,我正在使用 javascript classList 方法,但它似乎不适用于旧的 IE 浏览器 (http://caniuse.com/#search=classList),新浏览器和旧浏览器是否有任何标准解决方案?

var b = document.body;
// check body class
if (!b.classList.contains('ie-8')) {
    b.classList.add('ie-block');
    // removing DOM main container
    b.removeChild('mainContainer');
}

谢谢你的帮助。

可以使用

标准 .className 属性,该属性包含以空格分隔的类列表。

您的代码中还有一个错误:b.removeChild('mainContainer');行是错误的:removeChild 方法将Element作为参数,而您正在为其提供一个字符串。您应该首先获取该元素(我认为是带有id="mainContainer"的元素),然后正确删除它

如上所述,您可以检查主体的className是否包含所需的类并因此运行,这是一个工作示例:

var b = document.body;
if (~(" "+b.className+" ").indexOf(" ie-8 ")) {
    b.className += " ie-block";
    b.removeChild(document.getElementById("mainContainer"));
}

附加说明:

  • 我将这些空格添加到className中,因为 classNames 通常不以空格开头/结尾,但它们用空格分隔类,因此您需要检查" ie-8 "(带有前导空格),因为匹配它而不带空格可能会导致错误的标识(例如,像 "some-ie-8-thing" 这样的类会匹配)。
  • 我之所以使用 ~(...).indexOf,是因为只有当 indexOf 返回的数字为 -1 时,~运算符才会返回 0(即 false),这意味着仅当字符串包含给定的子字符串时,压号才会计算为 true。
  • 我还在" ie-block"开头添加一个空格,因为类用空格分隔。