繁体   English   中英

从右到左jQuery选择器不起作用

[英]Right to Left jQuery Selectors not working

在阅读有关Stackoverflow的有关jQuery Selector性能的文章时,我不断地重复阅读相同的内容,说jQuery对选择器使用了自下而上从右到左的方法。

举个例子...

$("#dnsTitle a.save").removeClass("disabled");

根据我一直在阅读的内容,使用它代替会更好。

$("a.save #dnsTitle").removeClass("disabled");

我遇到的问题是,这根本不起作用! 有人可以澄清做选择器的真正最佳方法吗?

我正在一个现有的项目中进行选择,它的选择器很长,我正在尽力改进它们,但似乎我得到的信息不正确或过时。 我正在使用jQuery 2.0

“自下而上/从右到左/从叶到根”的概念仅与选择器解析器的实现有关,与选择器的使用顺序无关。

用法:

从使用的角度来看,选择器是从左到右“读取”的,第一个选择器是您的根,随后的选择器是后代。 返回与最后一个选择器匹配的元素。 所以:

#dnsTitle a.save查找一个具有dnsTitle id的元素,然后从其dnsTitle查找一个类为save a元素。 您最终a带有save类的a元素。

a.save #dnsTitle查找具有类save a元素,然后从中找到id为dnsTitle 您最终得到的是具有id dnsTitle任何元素

解析:

现在,从解析的角度来看,解析选择器字符串有两种常用方法,它们是“自上而下”和“自下而上”:

  • 自上而下/从根到叶子/从左到右

    如果您读过“数据结构”课程,那么通常这就是解析树的方式。 您找到要开始的节点,它将是您的第一个选择器。 然后,您将继续寻找下一个节点。

    这种方法的问题是它使用递归方法并使用大量内存,尤其是在您的树很大的情况下。 另外,由于后续的选择器是后代 ,因此回溯问题也是一个问题,并且匹配的深度可能会有所不同。 下一个选择器可能匹配一个great ^ N孙子。 递归深入了N步,找到了那个大^ N个孩子,并采取了N步来返回。

  • 自下而上/从右到左/从根到叶

    使用这种方法,解析器将查找与最后一个选择器匹配的所有元素,最后得到一个匹配数组。 使用该匹配项数组,如果它们与后续的先前选择器匹配,则对它们进行过滤。

    这种方法的优点是您需要处理固定的数组,而不需要可变深度的树。 另外,由于节点在这种情况下只能有一个父节点,而自顶向下处理多个子节点时,则只能进行线性过滤。 这也意味着您只需要循环即可完成工作,而无需递归。 一个循环可以遍历每个结果,而另一个则嵌套,如果它与后续的先前选择器匹配,则可以遍历每个祖先。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM