亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

再談querySelector和querySelectorAll的區(qū)別與聯(lián)系

 更新時間:2012年04月20日 11:25:33   作者:  
先按W3C的規(guī)范來說這兩個方法應(yīng)該返回的內(nèi)容吧,大家先看下官方的解釋,然后根據(jù)需要選擇使用
先按W3C的規(guī)范來說這兩個方法應(yīng)該返回的內(nèi)容吧:
querySelector:

return the first matching Element node within the node's subtrees. If there is no such node, the method must return null.(返回指定元素節(jié)點的子樹中匹配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. (返回指定元素節(jié)點的子樹中匹配selector的節(jié)點集合,采用的是深度優(yōu)先預查找;如果沒有匹配的,這個方法返回空集合)

使用方法:
復制代碼 代碼如下:

var element = baseElement.querySelector(selectors);
var elementList = baseElement.querySelectorAll(selectors);

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

<div class="test" id="testId">
<p><span>Test</span></p>
</div>
<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的來理解,這個例子應(yīng)該返回:element:null;elementList:[];因為作為baseElement的 testElement里面根本沒有符合selectors的匹配子節(jié)點;但瀏覽器卻好像無視了baseElement,只在乎selectors,也就是說此時baseElement近乎document;這和我們的預期結(jié)果不合,也許隨著瀏覽器的不斷升級,這個問題會得到統(tǒng)一口徑!
人的智慧總是無窮的,Andrew Dupont發(fā)明了一種方法暫時修正了這個怪問題,就是在selectors前面指定baseElement的id,限制匹配的范圍;這個方法被廣泛的應(yīng)用在各大流行框架中;
Jquery的實現(xiàn):
復制代碼 代碼如下:

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

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

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;

非常感謝大牛JK的回復,提供了另外一種方法。

相關(guān)文章

  • JavaScript 中的 this 簡單規(guī)則

    JavaScript 中的 this 簡單規(guī)則

    想要確定this里規(guī)則是什么,其實方法很簡單,通過檢查它的調(diào)用位置,在函數(shù)被調(diào)用的時候確定this,下面就跟隨腳本之家小編一起通過本文學習吧
    2017-09-09
  • 淺談JavaScript Math和Number對象

    淺談JavaScript Math和Number對象

    這篇文章主要簡單介紹了JavaScript Math和Number對象的相關(guān)資料,需要的朋友可以參考下
    2015-01-01
  • javascript對象的相關(guān)操作小結(jié)

    javascript對象的相關(guān)操作小結(jié)

    下面小編就為大家?guī)硪黄猨avascript對象的相關(guān)操作小結(jié)。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • Flash圖片上傳組件 swfupload使用指南

    Flash圖片上傳組件 swfupload使用指南

    這篇文章主要介紹了Flash圖片上傳組件 swfupload使用方法及示例,swfupload的使用范圍十分的廣泛,功能也很強大,今天我們就先來簡單的通過范例來學習下。
    2015-03-03
  • JS拖動鼠標畫出方框?qū)崿F(xiàn)鼠標選區(qū)的方法

    JS拖動鼠標畫出方框?qū)崿F(xiàn)鼠標選區(qū)的方法

    這篇文章主要介紹了JS拖動鼠標畫出方框?qū)崿F(xiàn)鼠標選區(qū)的方法,涉及javascript鼠標事件及頁面元素樣式的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • JavaScript阻止回車提交表單的方法

    JavaScript阻止回車提交表單的方法

    如何防止回車(enter)鍵提交表單,其實很簡單,就一句話。onkeydown="if(event.keyCode==13)return false;"把這句寫在from標簽里面就好了
    2015-12-12
  • js實現(xiàn)兩個值相加alert出來精確到指定位

    js實現(xiàn)兩個值相加alert出來精確到指定位

    兩個值相加精確指定位數(shù)在alert出來,下面有個不錯的示例,感興趣的朋友可以參考下
    2013-09-09
  • JavaScript函數(shù)柯里化詳解

    JavaScript函數(shù)柯里化詳解

    這篇文章主要為大家介紹了JavaScript函數(shù)柯里化,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • JS倒計時代碼匯總

    JS倒計時代碼匯總

    這篇文章主要介紹了JS倒計時代碼,實例匯總了幾種常見的倒計時代碼,適用于不同的應(yīng)用場合,是非常實用的技巧,需要的朋友可以參考下
    2014-11-11
  • 比較新舊兩個數(shù)組值得增加和刪除的JS代碼

    比較新舊兩個數(shù)組值得增加和刪除的JS代碼

    這篇文章介紹了比較新舊兩個數(shù)組值得增加和刪除的JS代碼,有需要的朋友可以參考一下
    2013-10-10

最新評論