[英]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.