IE8不支持(例如,但不支持):last-child
,所以我常常发现自己做的事情:
/* CSS */
element:last-child,
element.last-child{
/* properties */
}
/* jQuery */
$('element:last-child').addClass('last-child');
由于jQuery提供了对原生不支持的CSS选择器的支持,有没有办法简单地评估CSS样式表,并且让jQuery( re - )应用样式而不必采用这种无聊的元素分类?
类似的东西:
$('link[rel="stylesheet"]').each(function(){
$.reapplyStylesheet($(this).attr('href'));
});
注意:鉴于实现特定于浏览器的CSS的方法过多,确实有另一种(也许是更好的)方法可以做到这一点,但我仍然很好奇。
答案 0 :(得分:1)
selectivizr是一个JavaScript实用程序,可在Internet Explorer 6-8中模拟CSS3伪类和属性选择器。只需在您的页面中包含脚本,选择将完成其余的工作。
答案 1 :(得分:1)
最简单的方法是使用像IE7-js
这样的填充库答案 2 :(得分:1)
任何解决方案都必须做你已经在幕后做的事情。 jQuery通过将它们分开来支持本机不受支持的选择器,并使用选择器的每个部分来执行一些DOM遍历 - 它没有做任何事情来使浏览器更能“理解”:last-child等。
这种DOM遍历必然要慢于CSS引擎解析并应用额外的类,特别是在这种情况下你关心的浏览器中。新的浏览器会有足够快的JS引擎,在很多情况下你都不会注意到这一点 - 但是那些浏览器还支持CSS3选择器。
另一个棘手的问题是构建浏览器是为了忽略(甚至不尝试解析)他们不理解的选择器的CSS规则。因此,您必须通过使用样式表作为一大块文本来进行所有分析和重新应用 - 您将无法通过常规机制访问“损坏”规则。
想象一下,你有一个系统:
我认为,这就是你需要做什么的基础。在旧浏览器中它会很慢 - 非常慢。更好的方法是从DOM角度接近 - 自动添加当前手工操作的类(.last-child)等。
答案 3 :(得分:1)
Modernizr是最好的选择之一。引用网站:
“充分利用HTML5和CSS3的新功能可能意味着牺牲对旧浏览器体验的控制。无论您的访问者使用何种浏览器或设备,Modernizr 2都是您制作最佳网站和应用程序的起点用“。
用于:推特,谷歌,微软等......
微软甚至推出了MVC 3的版本。我相信。