我一直在使用HTML5 selectors API,也就是querySelector
。这些选择器真的很容易使用和处理。如果你不熟悉这个接口,它非常类似于jQuery选择器API,他们得到一个CSS选择器字符串并选择正确的元素。例如,这些选择器的工作方式相同:
jQuery('#div') == document.querySelectorAll('#div')
jQuery('.myClass a') == document.querySelectorAll('.myClass a');
这个接口的Browser support相当不错。IE8支持它们。只有两个浏览器不支持这个接口: IE7和IE6。我正在寻找解决方案,以添加此功能到IE7和IE6。对我来说,querySelectorAll
和querySelector
就足够了,但如果有一种方法可以实现更多的功能,那就太好了!
我开始研究jQuery code,他们以前也这样做过,所以这是一个很好的地方来看看他们是如何创建选择器API的,但我不理解代码。有什么想法吗?
发布于 2011-09-23 01:49:13
您可以简单地使用jQuery使用的原始Sizzle引擎(由jQuery的作者John Resig编写)。
以下是Sizzle自己的描述:
是一个纯JavaScript的CSS选择器引擎,可以很容易地放入主机库中。
如果您想确保在本地支持querySelectorAll
的情况下不使用Sizzle
(即使Sizzle总是在可用时使用querySelectorAll
),请使用以下命令:
if ( ! document.querySelectorAll ) document.querySelectorAll = Sizzle;
发布于 2011-09-23 02:03:57
使用复杂的选择器来查找元素通常不是一个好主意,因为它将脚本功能紧密地绑定到文档的布局和表示上。应该采用更简单的策略,例如在文档中使用in、类或分组元素。
如果你这样做,然后分析你的需求,你可能会发现你只需要几个简单的选择器。在这种情况下,访问元素的标准DOM方法可能会完成90%的工作,您只需要添加一些过滤。例如,'#id‘只是getElementById (这是jQuery/Sizzle实际使用的选择器),而'.myClass a’可以使用一个相当简单的getElementsByClassname函数(大多数浏览器都有一个内置的),并带有一个针对A元素的过滤器。
当然,这样的函数可以首先测试qSA支持,并在可用时使用它。
还要注意的是,已经有许多活动文档集合可以非常高效地使用,而且早期的DOM集合(如getElementsByTagName)也是活动的。我非常确定qSA会返回静态集合,因为这就是带有选择器的javascript库所做的事情。
无论如何,这都是值得深思的。
https://stackoverflow.com/questions/7523424
复制相似问题