使用 jQuery.support 检测 IE6

Posted

技术标签:

【中文标题】使用 jQuery.support 检测 IE6【英文标题】:Detecting IE6 using jQuery.support 【发布时间】:2010-10-09 17:11:01 【问题描述】:

有人对如何使用 jquery.support 测试特定于 IE6(而不是 IE7)的东西有任何想法吗?

我的问题是 IE6 仅对锚元素支持 :hover psuedo-class,而 IE7 对所有元素(如 FF、Chrome 等)都支持。所以我想做一些特别的事情,以防浏览器不支持:悬停所有元素......因此我需要一种方法来测试这个功能。 (不想使用 jQuery.browser)。有什么想法吗?

【问题讨论】:

下面的答案都没有真正回答这个问题!这太荒谬了。 【参考方案1】:

jQuery.support 没有属性可以检测 :hover 支持 http://docs.jquery.com/Utilities/jQuery.support

但也许你可以简单地使用 hover() 事件 http://docs.jquery.com/Events/hover

【讨论】:

是的,这正是我的问题 :),我希望你使用 hover() 事件,但只有在 【参考方案2】:

您可以使用特定于 Microsoft Internet Explorer 的 Conditional Comment 将特定代码应用到 IE6。

<!--[if IE 6]>
  Special instructions for IE 6 here... e.g.
  <script>...hook hover event logic here...</script>
<![endif]-->

【讨论】:

这可能是最好的选择,只是想知道是否有人有其他方法可以做到这一点......因为 jquery 文档说“jQuery 附带了许多属性,你应该随意添加你的自己的。”。还是谢谢 如果您动态加载脚本或在动态创建的元素(例如模态)上运行代码,这将不起作用。 @KyleFarris 取决于...您可以使用条件注释检查 IE6,如果您满足该条件,请使用 .live() 处理程序根据需要为所有现有 DOM 元素和未来元素设置 jQuery 处理程序(在 jQuery 到 v1.8 中)或来自 jQuery 1.7+ 的首选 .on() api.jquery.com/on【参考方案3】:

这是我们应该退后一步并询问您为什么这样做的一个示例。

通常是创建一个菜单。如果是这样,我强烈建议您省去一些麻烦,并使用像 superfish 这样的插件或众多替代方案之一。

如果不是,我建议您使用jQuery hover() 事件监听器。例如:

$("td").hover(function() 
  $(this).addClass("hover");
, function() 
  $(this).removeClass("hover");
);

会做你想做的。

【讨论】:

我正在做一个可能包含很多项目的自定义下拉列表,所以我想在 :hover 的速度有问题吗?换句话说:支持混合解决方案的复杂性成本值得吗? 好问题,可能不是,只是使用悬停事件感觉有点迟钝 您的要求可能会有所不同,但我对 IE6 的一般立场是:它只需要功能。它不需要完美。它不应该有任何明显的缺点,但它只需要工作。 @cletus:我的问题是我 90% 的用户使用 IE6(墨西哥的 SaaS 企业应用程序),所以如果我不努力让他们的体验顺利进行,我会在脚。【参考方案4】:

虽然检查功能支持而不是用户代理是一种很好的做法,但没有简单的方法可以检查诸如使用 javascript 对 css 属性的支持之类的东西。我建议您遵循上述使用条件 cmets 的海报建议或使用 jQuery.browser。一个简单的实现(未验证性能或错误)可能如下所示:

if ($.browser.msie && $.browser.version.substr(0,1)<7) 
  // search for selectors you want to add hover behavior to
  $('.jshover').hover(
    function() 
      $(this).addClass('over');
    ,
    function() 
      $(this).removeClass('over');
    

在您的标记中,将 .jshover 类添加到您想要悬停 CSS 效果的任何元素。在您的 CSS 中,添加如下规则:

ul li:hover, ul li.over  rules here 

【讨论】:

你真的不应该使用 $.browser - 它已被弃用。 我必须同意@jaimedp;在没有提供适当替代方案的情况下弃用 $.browser 感觉就像倒退了一步。如果您无法通过功能检测来检测 CSS 功能或错误,您必须进行某种浏览器检测。 scunliffe 的答案更好,因为它适用于所有 IE6 用户,而不是仅启用 Javascript 的 IE6 用户。 我不禁想知道:if ($.browser.msie &amp;&amp; $.browser.version.substr(0,1)&lt;7) 是否使用了此代码(我认为这不是一个好方法)。当版本 10 上架时会发生什么。 substr 将返回明显小于 7 的 1。相反,您应该按照 alex 的建议使用 parseInt。 对于未来的用户,jquery 1.9 已删除 $.browser 并且此答案不适用于这种情况。【参考方案5】:

厚盒用途

if(typeof document.body.style.maxHeight === "undefined") 
    alert('ie6');
 else 
    alert('other');

【讨论】:

迄今为止最好的选择+1,相关:***.com/questions/8931729/…【参考方案6】:

我会使用 What:hover - http://www.xs4all.nl/~peterned/csshover.html

它使用行为并且对我很有效。

【讨论】:

我喜欢这个解决方案,非常简单。【参考方案7】:
if ($.browser.msie && parseInt($.browser.version, 10) == 6) 
  alert("I'm not dead yet!"); 

【讨论】:

你错过了问题的重点 - $.browser 不再存在于 jQuery 中。【参考方案8】:

只是为了好玩(不使用 jQuery.support):

$(document).ready(function()
    if(/msie|MSIE 6/.test(navigator.userAgent))
        alert('OMG im using IE6');
    
);

你也可以通过php来实现

<?
if(preg_match('/\bmsie 6/i', $ua) && !preg_match('/\bopera/i', $ua))
    echo 'OMG im using IE6';

?>

【讨论】:

以上是关于使用 jQuery.support 检测 IE6的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 属性

使用 jQuery 从跨域 Ajax 请求接收 XML 响应

ajax调用后,jquery mobile在复选框上没有样式

Web Api使用Get返回DataSet

IE8 环境的 JQuery 中的 $.ajax 拒绝访问---解决方案

Internet Explorer 中允许的 Ajax 跨域请求