1

如果访问者正在使用 Internet Explorer (IE),我想从指定的 ID 中删除一个类。

起初,我使用 IE 和以下 JavaScript 语法为访问者创建了一个重定向,它工作得很好:

<script language=javascript>
if ((navigator.userAgent.match(/IE/i))) {
    document.location = "http://www.somepage.com/IE_page.html";
    }
</script>

但我想采取不同的策略。我不想重定向到另一个页面,而是希望能够删除(或添加)类到 ID。

我创建但没有奏效的是:

<script language=javascript>
if ((navigator.userAgent.match(/IE/i))) {
    $('#someIdHere').removeClass('someClassHere');
    }
</script>

我在这个脚本上方有必要的 jQuery 链接。

这个 jQuery 语句缺少什么语法?

4

2 回答 2

3

您需要将代码包装在一个$(document).ready()块中,否则#someIdHere当您的代码执行时该元素将不存在于页面上。

$(document).ready(function () {
    if ((navigator.userAgent.match(/IE/i))) {
        $('#someIdHere').removeClass('someClassHere');
    }
});

.. 或者,您可以将代码包含在页面底部(在 之前</body>)而不是在<head>.

另请注意,您冒着将非 IE 浏览器与您的正则表达式模式匹配的风险。类似的东西/\bMSIE\b/i会更精确。


FWIW,请参阅HTML 脚本标签:类型或语言(或两者都省略)?关于language=javascript<script />标签中使用。

于 2013-07-27T09:43:44.673 回答
1

在 javascript 中有一种方法可以通过使用条件注释来检测 ie。这不是我的工作,我只会从Github发布 James Padolsey 的片段:

// ----------------------------------------------------------
// A short snippet for detecting versions of IE in JavaScript
// without resorting to user-agent sniffing
// ----------------------------------------------------------
// If you're not in IE (or IE version is less than 5) then:
//     ie === undefined
// If you're in IE (>=5) then you can determine which version:
//     ie === 7; // IE7
// Thus, to detect IE:
//     if (ie) {}
// And to detect the version:
//     ie === 6 // IE6
//     ie > 7 // IE8, IE9 ...
//     ie < 9 // Anything less than IE9
// ----------------------------------------------------------

// UPDATE: Now using Live NodeList idea from @jdalton

var ie = (function(){

    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');

    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    );

    return v > 4 ? v : undef;

}());

您可以采取的另一种方法是直接在您的 HTML 文件上使用条件注释,而无需直接在 JS 中检测任何内容(我认为这更可取):

<!--[if lt IE 7 ]> <html class="msie ie6"> <![endif]-->
<!--[if IE 7 ]>    <html class="msie ie7"> <![endif]-->
<!--[if IE 8 ]>    <html class="msie ie8"> <![endif]-->
<!--[if IE 9 ]>    <html class="msie ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html class=""> <!--<![endif]-->

用此代码段替换文件中的 HTML 标记。IE 将呈现与其版本相对应的标签。msie然后您可以在 html-tag 上查找该类的存在。

请注意,这两种解决方案都不适用于 IE10,因为此版本不再支持条件注释。

于 2013-07-27T10:10:34.327 回答