簡體   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