使用 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() 事件,但只有在您可以使用特定于 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");
);
会做你想做的。
【讨论】:
我正在做一个可能包含很多项目的自定义下拉列表,所以我想在虽然检查功能支持而不是用户代理是一种很好的做法,但没有简单的方法可以检查诸如使用 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 && $.browser.version.substr(0,1)<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 从跨域 Ajax 请求接收 XML 响应
ajax调用后,jquery mobile在复选框上没有样式