亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jquery選擇器原理介紹($()使用方法)

2019-11-20 20:54:52
字體:
來源:轉載
供稿:網友

每次申明一個jQuery對象的時候,返回的是jQuery.prototype.init對象,很多人就會不明白,init明明是jQuery.fn的方法啊,實際上這里不是方法,而是init的構造函數,因為js的prototype對象可以實現繼承,加上js的對象只是引用不會是拷貝,new jQuery,new jQuery.fn和new jQuery.fn.init的子對象是一樣的,只是有沒有執行到init的不同。

當我們使用選擇器的時候$(selector,content),就會執行init(selectot,content),我們看看inti中是怎樣執行的:

復制代碼 代碼如下:

if ( typeof selector == "string" )
{
 //正則匹配,看是不是HTML代碼或者是#id
    var match = quickExpr.exec( selector );
    //沒有作為待查找的 DOM 元素集、文檔或 jQuery 對象。
 //selector是#id的形式
 if ( match && (match[1] || !context) )
 {
  // HANDLE: $(html) -> $(array)
  //HTML代碼,調用clean補全HTML代碼
  if ( match[1] ){
   selector = jQuery.clean( [ match[1] ], context );
  }
  // 是: $("#id")
  else {
   //判斷id的Dom是不是加載完成
   var elem = document.getElementById( match[3] );
   if ( elem ){
    if ( elem.id != match[3] )
    return jQuery().find( selector );
    return jQuery( elem );//執行完畢return
   }
   selector = [];
  }
  //非id的形式.在context中或者是全文查找
 }
 else{
  return jQuery( context ).find( selector );
 }
}

這里就說明只有選擇器寫成$('#id')的時候最快,相當于執行了一次getElementById,后邊的程序就不用再執行了。當然往往我們需要的選擇器并不是這么簡單,比如我們需要id下的CSS為className, 有這樣的寫法$('#id.className')和$('#id').find('.className');這兩種寫法的執行結果都是一樣的,比如<div id=”id”><span class=”className”></span></div>,返回的肯定都是<span class=”className”></span>,但是執行的效率是完全不一樣的。

在分析一下上邊的代碼,如果不是$('#id')這樣的簡單選擇器的話,都會執行find函數,那我們再看看find到底是做用的:

復制代碼 代碼如下:

find: function( selector ) {
 //在當前的對象中查找
 var elems = jQuery.map(this, function(elem){
  return jQuery.find( selector, elem );
 });
 //下邊的代碼可以忽略,只是做一些處理
 //這里應用了js的正則對象的靜態方法test
 //indexOf("..")需要了解一下xpath的語法,就是判斷selector中包含父節點的寫法
 //本意就是過濾數組的重復元素
 return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ?
  jQuery.unique( elems ) :
  elems );
}

如果這樣寫$('#id .className'),就會執行到擴展的find('#id .className',document),因為當前的this是document的jQuery數組,那我們在看看擴展的find他的實現,代碼比較 多,就不列出來,總之就是從第二個參數傳遞進行的dom第一個子節點開始找,遇見#比對id,遇見.比對ClassName,還有:<+-等處理。 那我們要優化,是不是就要想辦法讓第二個參數context的范圍最小,那樣遍歷是不是就很少了?

如果我們這樣寫$('#id').find('.className'),那程序只這樣執行 的,第一次init的時候執行一步getElementById,就return了,接著執行 find('.className',divDocument),divDocument就是我們第一次選擇的是div標簽,如果document下有很 多dom對象的時候,這次只遍歷divDocument是不是少了很多次,而且在第一次選擇id的速度也要比遍歷快的多。

現在大家應該是明白了吧。就是說第一層選擇最好是ID,而是簡單選擇器,目的就是定義范圍,提高速度。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人成在线一二| 成人网在线视频| 亚洲视频在线免费看| 欧美成年人在线观看| 午夜精品久久久久久久男人的天堂| 欧美亚洲另类在线| 国产一区二区三区网站| 亚洲最大福利视频网站| 亚洲色图35p| 国产日韩欧美另类| 在线视频欧美日韩| 国产成人精品久久亚洲高清不卡| 欧美性xxxx18| 欧美一区二区三区四区在线| 成人信息集中地欧美| 国产精品久久久久一区二区| 色无极亚洲影院| 97国产在线视频| 成人激情在线观看| 91中文字幕在线| 91干在线观看| 中文字幕av一区二区| 久久久久久网址| 亚洲成人av中文字幕| 77777少妇光屁股久久一区| 亚洲一区二区三区在线视频| 国产91精品网站| 国产亚洲福利一区| 2019中文字幕在线免费观看| 综合国产在线视频| 在线性视频日韩欧美| 欧美精品福利视频| 久久视频在线观看免费| 日韩精品在线观看一区二区| 国产精品免费一区二区三区都可以| 久久久国产一区二区| 中文字幕精品一区久久久久| 欧美激情一二三| 国产精品视频自拍| 97视频在线免费观看| 欧美一乱一性一交一视频| 欧美成人国产va精品日本一级| 久久亚洲精品中文字幕冲田杏梨| 日韩高清a**址| 欧美成人自拍视频| 在线视频精品一| 国产一区二区三区视频| 色悠悠久久88| 最近2019中文字幕在线高清| 免费不卡在线观看av| 国产日韩欧美在线播放| 亚洲成人xxx| 国产精品 欧美在线| 久久五月天综合| 精品少妇v888av| 久久99国产精品久久久久久久久| 国产伊人精品在线| 亚洲人永久免费| 欧美做爰性生交视频| 91精品国产综合久久香蕉最新版| 欧美国产在线视频| 国产精品久久久久久久7电影| 福利视频一区二区| 国产精品久久久久久五月尺| 欧美成人第一页| 亚洲影院色无极综合| 日韩专区在线观看| 日韩精品www| 麻豆国产精品va在线观看不卡| 国产精品久久久久久网站| 久久躁狠狠躁夜夜爽| 亚洲成人av资源网| 午夜精品久久久久久99热| 成人a免费视频| 欧美一级bbbbb性bbbb喷潮片| 欧美激情videos| 国产日韩欧美91| 国产日韩中文字幕| 欧美国产日韩在线| 538国产精品一区二区免费视频| 久久久精品电影| 欧美丝袜一区二区| 日韩在线观看网站| 欧美色播在线播放| 久久国产精品电影| 国产成人精品在线播放| 久久精品一偷一偷国产| 国产不卡一区二区在线播放| 亚洲一区二区三区在线免费观看| 亚洲成人动漫在线播放| 日韩福利在线播放| 色综久久综合桃花网| 日韩免费电影在线观看| 亚洲国产免费av| 最新国产精品拍自在线播放| 视频在线观看99| 夜夜嗨av色一区二区不卡| 国产亚洲一区二区在线| 欧美精品电影在线| 国产成人精品电影久久久| 日韩小视频网址| www.亚洲一二| 色偷偷噜噜噜亚洲男人的天堂| 欧美限制级电影在线观看| 亚洲xxxx视频| 亚洲电影av在线| 久久久久久久久国产精品| 欧美一级淫片丝袜脚交| 青青草精品毛片| 国内精品久久久久影院 日本资源| 日韩av网址在线观看| 日韩中文字幕av| 亚洲最新在线视频| 国产成人精品综合久久久| 午夜精品蜜臀一区二区三区免费| 成人午夜小视频| 欧美高清视频在线| 亚洲社区在线观看| 在线播放精品一区二区三区| 国产精品成久久久久三级| 国产91在线视频| 奇米4444一区二区三区| 国产在线精品成人一区二区三区| 亚洲人成欧美中文字幕| 精品中文字幕视频| 久久国产精品影视| 一区二区在线免费视频| 91精品久久久久久久久青青| 久久这里只有精品视频首页| 亚洲国内精品视频| 欧美成人免费在线视频| 亚洲专区中文字幕| 欧美第一页在线| 国产精品18久久久久久麻辣| 国产精品视频免费在线| 亚洲性视频网址| 国产国产精品人在线视| 国产亚洲精品一区二区| 亚洲高清一二三区| 欧美日韩福利在线观看| 久精品免费视频| 亚洲精品一区在线观看香蕉| 午夜剧场成人观在线视频免费观看| 蜜臀久久99精品久久久无需会员| 一本一本久久a久久精品综合小说| 国产在线不卡精品| 国产69精品久久久久9999| 亚洲欧美制服综合另类| 亚洲欧美综合精品久久成人| 91九色在线视频| 久久久爽爽爽美女图片| 欧美一区在线直播| 57pao国产精品一区| 久久视频在线免费观看| 成人久久18免费网站图片| 亚洲欧美综合精品久久成人| 国产精品黄色影片导航在线观看| 精品久久久中文| 国产成人精品在线观看| 浅井舞香一区二区| 久久精品99久久香蕉国产色戒| 亚洲女人初尝黑人巨大| 日本精品视频在线观看| 久久频这里精品99香蕉|