国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

jquery選擇器引擎sizzle淺析_jquery

來源:懂視網 責編:小采 時間:2020-11-27 21:07:19
文檔

jquery選擇器引擎sizzle淺析_jquery

jquery選擇器引擎sizzle淺析_jquery:I'm sorry!我用jquery的大概有一年了,只知道$(selector),其內部選擇器的流程走向完全不清晰!于是看了jquery的源碼,jquery用的選擇器的引擎是sizzle,是jquery的作者另一開源項目,在github上面有,號稱最快的dom選擇器!不到2000行代碼。上面說了
推薦度:
導讀jquery選擇器引擎sizzle淺析_jquery:I'm sorry!我用jquery的大概有一年了,只知道$(selector),其內部選擇器的流程走向完全不清晰!于是看了jquery的源碼,jquery用的選擇器的引擎是sizzle,是jquery的作者另一開源項目,在github上面有,號稱最快的dom選擇器!不到2000行代碼。上面說了

I'm sorry!我用jquery的大概有一年了,只知道$(selector),其內部選擇器的流程走向完全不清晰!于是看了jquery的源碼,jquery用的選擇器的引擎是sizzle,是jquery的作者另一開源項目,在github上面有,號稱最快的dom選擇器!不到2000行代碼。

上面說了不是很精彩的開場白,我么來個 for example: $('.test') 在jquery的流程是怎么走的呢?
1.首先會做如下的判斷
代碼如下:
/**
*關于 querySelectorAll函數
*返回當前文檔中匹配一個特定選擇器的所有的元素
*var nodelist = element.querySelectorAll("div.test");
*支持瀏覽器 ie8+,Chrome,Firefox(3.5)
* 如果你不清楚可以google 一下
*/
if ( document.querySelectorAll ) {
(function(){
var oldSizzle = Sizzle,
div = document.createElement("div"),
id = "__sizzle__";
div.innerHTML = "";
// Safari can't handle uppercase or unicode characters when
// in quirks mode.
if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
return;
}
Sizzle = function( query, context, extra, seed ) {
//使用querySelectorAll 來查詢
}
}

如果你的瀏覽器是ie8+ 或者 谷歌,直接通過內置的querySelectorAll(".test")返回dom結構。 如果你使用是ie6,那么下面事情發生了
2. 不支持querySelectorAll 就會啟動內部 sizzle。下面是流程
代碼如下:
/**
.sizzle 通過
chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g
這個正則進行匹配,
.把我們傳來的參數'.test',匹配成'.test' 放到數組
.檢測瀏覽器是否支持getElementsByClassName 如果支持,則通過此函數返回dom,如果不支持此函數則 context.getElementsByTagName( "*" ) ,通過上下文把所有的元素選出來,在通過循環,選擇className = 'test' 的元素,放入數組返回dom。
*/

ok,以上是$('.test')的流程,如果你很迷惑,你可以看看源碼,調試一下。
關于sizzle的選擇器
個人認為,sizzle選擇器是增強版的querySelectorAll 函數, 因為querySelectorAll 不支持 'div.test :eq(1)' 這樣的selector 和css3選擇!
當你的selector里面不出現nth|eq|gt|lt|first|last|even|odd 這樣的字符時候, 從右向左,所謂的從右向左,比如 $('div img') 首先會把所有的img 選出來,通過parent 是div 進行過濾 。 這樣很高效的原因是只進行一次dom的查詢!
當你selector 出現了'eq(1)' 這樣的字符的時候,就變正常了,從左向右!這是因為要對結果集進行過濾。
思考
$('div img:eq(0)') 與 $('div img').first() 哪個效率高? 個人認為 后一個高一些,因為 第一從左向右效率低下!沒有測試過!理論推導!

今天大致看了下流程,具體的代碼沒怎么細研究!這里面好的思想值得學習和吸收
歡迎拍磚

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

jquery選擇器引擎sizzle淺析_jquery

jquery選擇器引擎sizzle淺析_jquery:I'm sorry!我用jquery的大概有一年了,只知道$(selector),其內部選擇器的流程走向完全不清晰!于是看了jquery的源碼,jquery用的選擇器的引擎是sizzle,是jquery的作者另一開源項目,在github上面有,號稱最快的dom選擇器!不到2000行代碼。上面說了
推薦度:
標簽: 引擎 選擇器 jQuery
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲欧美另类在线 | 欧美啊v | 亚洲综合日韩 | 精品国产91 | 久久精品国产免费一区 | 亚洲国产精品免费视频 | 午夜视频免费在线观看 | 亚洲日韩图片专区第1页 | 香蕉一区 | 国产在线精品一区二区三区不卡 | 亚洲欧美视屏 | 日韩高清在线观看 | 一级一级特黄女人精品毛片视频 | 精品久久久久久综合网 | 欧美成人在线视频 | 亚洲精品98久久久久久中文字幕 | 在线免费观看一区二区三区 | 国产全部视频在线播放 | 99国产精品| 亚洲wuma| 99久久免费国产精精品 | 99久久免费国产精品特黄 | 国产三级一区二区 | 国内精品一区二区 | 亚洲欧美日韩国产 | 国产综合精品一区二区 | 黄色毛片免费在线观看 | 日韩欧美精品综合一区二区三区 | 国产麻豆流白浆在线观看 | 亚洲欧美日韩精品久久久 | 在线国产视频观看 | 亚洲欧美日韩第一页 | 国产欧美视频在线观看 | 国产欧美日韩一区二区三区 | 久久精品国产免费中文 | 国产资源在线播放 | 精品123区| 欧美一级久久久久久久大片 | 亚洲一区 中文字幕 久久 | 欧美a在线播放 | 亚洲精品91 |