国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

css3 - jQuery/CSS選擇器效率問題

瀏覽:112日期:2023-08-05 16:19:33

問題描述

<p id='all'> <p class='class1'>one</p> <p class='class1'>two</p> <p class='class1'>three</p> <p class='class1'>four</p> <p class='class2'>five</p></p>

通過實驗發現$('#all').find('.class2')要比$('#all .class2')性能好,為什么呢?jQuery和CSS都用的是Sizzle選擇器引擎,他的解析方式是從右向左。也有說如果最左邊指定了id,就會先取id,這時是不是就會從左向右匹配了?

問題解答

回答1:

沒看過具體實現,不過,前者顯然是從左到右匹配,後者如果也是,性能應該一樣。既然前者性能更好,那麼顯然後者該是從右向左的了。

可以考慮再做一個測試:

<p id='all'> <span class='class1'>one</p> <span class='class1'>two</p> <span class='class1'>three</p> <span class='class1'>four</p> <p class='class2'>five</p></p>

測試 $('#all').find('p.class2') 和 $('#all p.class2')

回答2:

Sizzle選擇器引擎的主要工作就是向上兼容querySelectorAll這個API,假如所有瀏覽器都支持該API,那Sizzle就沒有存在的必要性了。sizzle選擇器一般是從右向左匹配(在不存在位置偽類的時候),Sizzle也不完全是采用從右到左,如果選擇器表達式的最左邊存在#id選擇器,就會首先對最左邊進行查詢,并將其作為下一步的執行上下文,最終達到縮小上下文的目的, $('#all.class2') 這句將先匹配所有#all元素,然后將其作為上下文在里面查找.class2 $('#all').find('.class2')而這里則先匹配#all,再從中找匹配.class2;兩種如果是使用sizzle的話,性能應該是差不多的。但是在支持querySelectorAll的瀏覽器中,可能前者沒有使用sizzle引擎,而直接調用原生的,就導致二者不一樣了。所有鄙人猜測就出現了題主的結果

標簽: CSS
相關文章:
主站蜘蛛池模板: 青青热久久国产久精品秒播 | 国产精品大全国产精品 | 男人把女人桶到喷白浆的视频 | 国产成人午夜性视频影院 | 国产欧美日韩综合精品无毒 | 91国偷自产一区二区三区 | 成人黄激情免费视频 | 免费嗨片 | 8050网午夜一级毛片免费不卡 | 久草视频在 | 国产精品久久久久久搜索 | 国产女人一区二区 | 九九在线偷拍视频在线播放 | 欧美成人亚洲高清在线观看 | 99久久国产综合精品成人影院 | 久久久久久国产精品免费免 | 欧美高清一级 | 美女福利视频午夜在线 | 999国产精品亚洲77777 | 黄色影院在线观看视频 | 亚洲三级视频在线观看 | 免费在线成人 | 三级网站大全 | 国产精品18久久久久久久久久 | 美国三级在线 | 美国一级欧美三级 | 久久手机免费视频 | 亚洲免费在线视频 | 极品精品国产超清自在线观看 | 欧美高清另类自拍视频在线看 | 日韩成人黄色片 | 久久久综合久久 | 国产美女做爰免费视频软件 | 一级毛片在线视频 | 中文字幕日韩一区二区不卡 | 男人的天堂2018 | 欧美日本在线一区二区三区 | 日本高清一本二本三本如色坊 | 国产精品午夜国产小视频 | 久草视频资源站 | 国产精品三级a三级三级午夜 |