• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答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
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    原生強大的DOM選擇器querySelector詳細介紹(代碼附上)

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

    原生強大的DOM選擇器querySelector詳細介紹(代碼附上)

    原生強大的DOM選擇器querySelector詳細介紹(代碼附上):這篇文章主要介紹了原生的強大DOM選擇器querySelector一些相關知識,需要的朋友可以參考下在傳統的 JavaScript 開發中,查找 DOM 往往是開發人員遇到的第一個頭疼的問題,原生的 JavaScript 所提供的 DOM 選擇方法并不多,僅僅局限于通過 tag, name
    推薦度:
    導讀原生強大的DOM選擇器querySelector詳細介紹(代碼附上):這篇文章主要介紹了原生的強大DOM選擇器querySelector一些相關知識,需要的朋友可以參考下在傳統的 JavaScript 開發中,查找 DOM 往往是開發人員遇到的第一個頭疼的問題,原生的 JavaScript 所提供的 DOM 選擇方法并不多,僅僅局限于通過 tag, name

    這篇文章主要介紹了原生的強大DOM選擇器querySelector一些相關知識,需要的朋友可以參考下

    在傳統的 JavaScript 開發中,查找 DOM 往往是開發人員遇到的第一個頭疼的問題,原生的 JavaScript 所提供的 DOM 選擇方法并不多,僅僅局限于通過 tag, name, id 等方式來查找,這顯然是遠遠不夠的,如果想要進行更為精確的選擇不得不使用看起來非常繁瑣的正則表達式,或者使用某個庫。事實上,現在所有的瀏覽器廠商都提供了 querySelector 和 querySelectorAll 這兩個方法的支持,甚至就連微軟也派出了 IE 8 作為支持這一特性的代表,querySelector 和 querySelectorAll 作為查找 DOM 的又一途徑,極大地方便了開發者,使用它們,你可以像使用 CSS 選擇器一樣快速地查找到你需要的節點。

    querySelector 和 querySelectorAll 的使用非常的簡單,就像標題說到的一樣,它和 CSS 的寫法完全一樣,對于前端開發人員來說,這是難度幾乎為零的一次學習。假如我們有一個 id 為 test 的 p,為了獲取到這個元素,你也許會像下面這樣:

    document.getElementById("test");
    現在我們來試試使用新方法來獲取這個 p:

    下面是個小演示:

    我是 id 為 test 的 p

    感覺區別不大是吧,但如果是稍微復雜點的情況,原始的方法將變得非常麻煩,這時候 querySelector 和 querySelectorAll 的優勢就發揮出來了。比如接下來這個例子,我們將在 document 中選取 class 為 test 的 p 的子元素 p 的第一個子元素,當然這很拗口,但是用本文的新方法來選擇這個元素,比用言語來描述它還要簡單。

    document.querySelector("p.test>p:first-child");
    document.querySelectorAll("p.test>p:first-child")[0];

    下面是個小演示:

    我是層里的 p 標簽

    現在應該對于 querySelector、querySelectorAll 方法中的參數已經非常明白了,是的,它接收的參數和 CSS 選擇器完全一致。querySelector 和 querySelectorAll 的區別在于 querySelector 用來獲取一個元素,而querySelectorAll 可以獲取多個元素。querySelector 將返回匹配到的第一個元素,如果沒有匹配的元素則返回 Null。querySelectorAll 返回一個包含匹配到的元素的數組,如果沒有匹配的元素則返回的數組為空。在本文最后一個例子中,我們使用 querySelectorAll 給所有 class 為 emphasis 的元素加粗顯示。

    var emphasisText = document.querySelectorAll(".emphasis");
    for( var i = 0 , j = emphasisText.length ; i < j ; i++ ){
     emphasisText[i].style.fontWeight = "bold";
    }

    這是原生方法,比起jquery速度快,缺點是IE6、7不支持。

    W3C的規范與庫中的實現

    querySelector:return the first matching Element node within the node's subtrees. If there is no such node, the method must return null .(返回指定元素節點的子樹中匹配selector的集合中的第一個,如果沒有匹配,返回null)

    querySelectorAll:return a NodeList containing all of the matching Element nodes within the node's subtrees, in document order. If there are no such nodes, the method must return an empty NodeList. (返回指定元素節點的子樹中匹配selector的節點集合,采用的是深度優先預查找;如果沒有匹配的,這個方法返回空集合)

    這在BaseElement 為document的時候,沒有什么問題,各瀏覽器的實現基本一致;但是,當BaseElement 為一個普通的dom Node的時候(支持這兩個方法的dom Node ),瀏覽器的實現就有點奇怪了,舉個例子:

    <p class= "test" id= "testId" > 
     <p><span>Test</span></p> 
    </p> 
    <script type= "text/javascript" > 
     var testElement= document.getElementById( 'testId' ); 
     var element = testElement.querySelector( '.test span' ); 
     var elementList = document.querySelectorAll( '.test span' ); 
     console.log(element); // <span>Test</span>
     console.log(elementList); // 1 
    </script>

    按照W3C的來理解,這個例子應該返回:element:null;elementList:[];因為作為baseElement的 testElement里面根本沒有符合selectors的匹配子節點;但瀏覽器卻好像無視了baseElement,只在乎selectors,也就是說此時baseElement近乎document;這和我們的預期結果不合,也許隨著瀏覽器的不斷升級,這個問題會得到統一口徑!

    人的智慧總是無窮的,Andrew Dupont發明了一種方法暫時修正了這個怪問題,就是在selectors前面指定baseElement的id,限制匹配的范圍;這個方法被廣泛的應用在各大流行框架中;

    Jquery的實現:

    var oldContext = context,
    old = context.getAttribute( "id" ),
    nid = old || id,
    try {
    	if ( !relativeHierarchySelector || hasParent ) {
     	return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
     	} 
    } 
    catch (pseudoError) {} 
    finally {
    	if ( !old ) {
    	 	oldContext.removeAttribute( "id" );
    	}
    }

    先不看這點代碼中其他的地方,只看他如何實現這個方法的;這點代碼是JQuery1.6的片段;當baseElement沒有ID的時候,給他設置一個id = "__sizzle__”,然后再使用的時候加在selectors的前面,做到范圍限制;context.querySelectorAll( "[id='" + nid + "'] " + query ;最后,因為這個ID本身不是baseElement應該有的,所以,還需要移除:oldContext.removeAttribute( "id" ); ,Mootools的實現:

    var currentId = _context.getAttribute( 'id' ), slickid = 'slickid__' ;
    _context.setAttribute( 'id' , slickid);
    _expression = '#' + slickid + ' ' + _expression;
    context = _context.parentNode;

    Mootools和Jquery類似:只不過slickid = 'slickid__';其實意義是一樣的;方法兼容性:FF3.5+/IE8+/Chrome 1+/opera 10+/Safari 3.2+;IE 8 :不支持baseElement為object;

    上面是我整理給大家的,希望今后會對大家有幫助。

    相關文章:

    Node.Js實現端口重用步驟詳解

    js繼承中的方法重寫重點講解

    js方法的重寫和重載的技巧詳解

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

    文檔

    原生強大的DOM選擇器querySelector詳細介紹(代碼附上)

    原生強大的DOM選擇器querySelector詳細介紹(代碼附上):這篇文章主要介紹了原生的強大DOM選擇器querySelector一些相關知識,需要的朋友可以參考下在傳統的 JavaScript 開發中,查找 DOM 往往是開發人員遇到的第一個頭疼的問題,原生的 JavaScript 所提供的 DOM 選擇方法并不多,僅僅局限于通過 tag, name
    推薦度:
    標簽: 代碼 原生 DOM
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品亚洲专区在线观看 | 一区二区国产精品| WWW国产精品内射老师| 亚洲精品国产高清嫩草影院| 人精品影院| 麻豆精品久久精品色综合| 国内精品伊人久久久久AV影院| 欧美精品免费专区在线观看| 99国产精品国产免费观看| 97久久精品国产精品青草| 亚洲精品无码成人片久久| 久久精品免费大片国产大片| 97精品国产高清自在线看超| 国产精品久久自在自线观看| 国产女人精品视频国产灰线| 嫖妓丰满肥熟妇在线精品| 亚洲国产精品成人久久蜜臀| 久久无码人妻精品一区二区三区| 91麻豆精品国产91久久久久久| 国产成人亚洲精品青草天美| 精品国产三级a∨在线欧美| 亚洲动漫精品无码av天堂| 午夜精品一区二区三区在线观看 | 精品国产日韩亚洲一区| 国产精品99久久久久久猫咪 | 99在线精品视频| 久久精品aⅴ无码中文字字幕不卡| 在线精品无码字幕无码AV| 亚洲?V乱码久久精品蜜桃| 欧美日韩精品一区二区三区不卡 | 午夜精品久视频在线观看| 精品国产一区二区三区久久| 2020亚洲男人天堂精品| 国产AV无码专区亚洲精品 | 久热这里只有精品12| 欧美亚洲色综久久精品国产| 亚洲AV午夜福利精品一区二区| 亚洲国产精品综合久久一线| 欧美精品播放| 中文字幕久精品免费视频| 日韩AV无码精品人妻系列|