- friendship connection
自由淘
午梅
万德尼科
爱特流体控制有限公司
ccie real lab
大连鲁班软件有限公司
富地机械制造有限公司
尚和会馆
在IE中使用高级CSS3选择器(二)
替代方案
显然这个也并非完美的方案,对于Ajax网站来说,它基本上是不能用的,因为在生成的样式表被应用之后再改变DOM,就不会有效了。但是事实上我们 可以自己来自定义一个ie-css3的。只是没有它这个这么智能。
使用 cssQuery
cssQuery是 由业界大牛Dean Edwards开发的一个Javascript组件。它就是为CSS 选择器而生的。它可以支持几乎所有的CSS 选择器,包括CSS3选择器。当然它在实现的时候进行了分级,分别针对CSS1,CSS2和CSS3制作了一个独立的js包,以及一个标准包。支持所有A 级浏览器。
简单的用法:
var tags = cssQuery("body > p");
var tags = cssQuery("[href]");
var tags = cssQuery("a[href='#']");
然后你就可以自己写一些js为相应的对象添加想用的样式了。
我建议对支持CSS高级选择器的浏览器使用原生的CSS选择器写法,然后通过cssQuery在IE中动态的为响应的元素添加一个样式名。
比如,我们可以这样写CSS:
a[herf='#'],a.empty{color:red}
这里的第一条CSS3选择器是用于Firefox/webkit等支持CSS3选择器的非IE浏览器的,a.empty是专门为IE而写。然后通过 CSSQuery动态的在IE浏览器中为对应的元素添加样式:
var tags = cssQuery("a[href='#']");
tags.className="empty";
当然,上面的这段js最好使用IE的条件注释。
使用 jQuery
据说jQuery的选 择器比cssQuery要快很多。当然,无可否认,jQuery的选择器是目前流行的js框架中最好用的一个。而使用jquery来实现类似上述 功能要方便很多,因为jQuery的选择器更好用。
OK,jQuery的做法和cssQuery有些类似,CSS可以写成上面一样的,JS可以这样写:
$("a[href='#']").addClass("empty");
更具体的用法可以查看我之前写的一个小例子《使用jQuery创建个性化链接样式》
使用 DOMAssistant
DOMAssistant也是一个很不错的JS库,它提供了一些类似jQuery的功能,比如CSS 选择器、事件以及一些DOM操作。它的优点就是小巧,压缩后只有9KB,我想这就是Keith Clark选择DOMAssistant来作为ie-css3.js的基础框架的主要原因吧。jQuery越来越肥胖了,而且用于实现这个功能有些浪费 了。而且DOMAssistant的用法和jQuery非常类似。
事实上,DOMAssistant的选择器和对DOM的CSS Class的操作与jQuery一模一样。
$("a[href='#']").addClass("empty");
欲了解更多,可查看DOMAssistant官方,以及下载官方中文PDF文档
总结
其实,无论是ie-css3.js本身,还是后来我们讨论的三种替代方法,都是一种方法,就是用js动态的添加class到页面元素中。不同是 ie-css3自动化的完成了这些工作,而后面的三种方案要自己动手根据自己的项目写一些js来实现。我认为ie-css3最方便,基本不用怎么维护,但 是它一刀切,效率比较低,而且灵活性差,不适合于ajax项目。而后面的这几种方案灵活性强,但是要做很多额外的工作,无论你是将IE专用样式独立到一个 专用的css文件中还是像文中写的那样和CSS3选择器写到一起,都会大大的增加你的工作量和维护成本。
为IE,我们要额外付出很多。
有更好的想法或创意吗?欢迎与我们分享。
上一篇:在IE中使用高级CSS3选择器(一)
下一篇:HTML5标准最新技术预览

嗯,是任何人都遇到这个博客上加载的图像的问题吗?我试图找出如果它是一个问题对我的结束,或者如果它的博客。任何反馈将不胜感激。
我最初提出的时候,我点击“通知我新的评论时,添加”复选框,现在每次添加评论我得到同样的评论四个电子邮件的时间。是否有什么办法,您可以从服务中删除我?非常感谢!
我们绝对喜欢你的博客,找到了很多您的文章的,正是我要找的。不提供客人作家写自己的内容?我不会介意生产后,或阐述一些你写这里涉及到的科目。同样,真棒网站!