Javascript教程:querySelector()方法,

來源:互聯網
上載者:User

Javascript教程:querySelector()方法,

module dom {
[Supplemental, NoInterfaceObject]
interface NodeSelector {
Element querySelector(in DOMString selectors);
NodeList querySelectorAll(in DOMString selectors);
};
Document implements NodeSelector;
DocumentFragment implements NodeSelector;
Element implements NodeSelector;
};

從介面定義可以看到Document、DocumentFragment、Element都實現了NodeSelector介面。即這三種類型的元素都擁有者兩個方法。querySelector和querySelectorAll的參數須是符合css selector的字串。不同的是querySelector返回的是一個對象,querySelectorAll返回的一個集合(NodeList)。精心開發5年的UI前端架構!

目前 IE8/9及Firefox/Chrome/Safari/Opera的最新版已經支援它們。

 

 

 querySelector()方法接受一個CSS查詢並返回匹配模式的第一個子孫元素,如果沒有匹配的元素則返回null。請看下面的例子:

//擷取body元素   varbody=document.querySelector("body");   //擷取ID為myDiv的元素   varmyDiv=document.querySelecotr("#myDiv");   //擷取第一個包含類selected的元素   varselected=document.querySelector(".selected");   //擷取第一個包含類button的映像元素
 

  
  varimg=document.body.querySelector("img.button");當querySelector()方法應用Document類型上時,它會嘗試從文件項目開始匹配模式。如果應用與Element類型,查詢則只會嘗試從該元素的子孫節點中尋找匹配。
  
  CSS查詢可以根據需要複雜化或簡單化。如果查詢中有語法錯誤或者有不支援選取器,那麼querySelector()或拋出一個錯誤。 精心開發5年的UI前端架構!   
  
  querySelector()方法還接受可選的第二個參數,它是一個命名空間解析器,就是一個接受一個命名空間首碼並返回其相關URI的函數,類似於:

varnsresolver=function(prefix){   switch(prefix){   case"w3cmm":   return"http://www.w3cmm.com";   //此處其它代碼   }   };
 


  
命名空間解析器對於在嵌入了其它語言諸如SVG或MathML的XHTML文檔中執行查詢非常有用,XML文檔亦如此。CSS查詢中的命名空間是使用一個管道來指定的,如下:

varsvgImage=document.querySelector("svg|svg",function(prefix){   switch(prefix){   case:"svg":   return"http://www.w3.rog/2000/svg";   }   });
 


  
這個例子通過在文檔中尋找定義為<svg:svg>的元素返回了第一個SVG映像。當在查詢中遇到了svg命名空間首碼時,則調用命名空間解析器函數來確定URI。沒有命名空間解析器,則會拋出一個錯誤,因為查詢引擎無法辨識svg命名空間首碼。
   精心開發5年的UI前端架構!   
各瀏覽器中querySelector和querySelectorAll的實現差異

如想擷取頁面class屬性為"red"的元素,除了使用document.getElementsByClassName('red')還可以使用document.querySelector('.red')和document.querySelectorAll('.red')。

但Element.querySelector和Element.querySelectorAll的實現有錯誤,如下

<div id="d1">     <p><a href=http://www.jcodecraeer.com>SINA</a></p> </div> <script type="text/javascript">        function $(id){return document.getElementById(id);}     var d1 = $('d1');     var obj1 = d1.querySelector('div a');     var obj2 = d1.querySelectorAll('div a');     alert(obj1); // -> http://www.jcodecraeer.com     alert(obj2.length); // -> 1   </script>
 

在支援這兩個方法的瀏覽器可以看到分別彈出了“http://www.sina.com.cn/”,和 “1”。說明查詢到了想要的元素或元素集合。這與W3C的定義卻是不合的,根據定義應該是在元素d1範圍內尋找"div a",而d1內壓根沒有div。因此應該分別返回null,空集合。

jQuery1.4.2 及之前版本中只使用了document.querySelectorAll,沒有使用Element.querySelectorAll。 jQuery1.4.3 後使用了Element.querySelectorAll,但做了修複。在選取器前加了"#__sizzle__"以強制其在指定元素內尋找(3903-3918行)。簡化下 精心開發5年的UI前端架構!  

function $(id){return document.getElementById(id);} var d1 = $('d1'); var obj1 = d1.querySelector('div a'); var obj2 = d1.querySelectorAll('div a'); var old = d1.id, id = d1.id = "__sizzle__"; try {     var query = '#' + id + ' div a';     alert(d1.querySelector( query ));     alert(d1.querySelectorAll( query ).length); } catch(e) { } finally {     old ? d1.id = old : d1.removeAttribute( "id" ); }
 


實現很巧妙,指定範圍的元素如果有id,將其保留在old,"__sizzle__"賦值其作為臨時id,在選取器"div a"前指定尋找範圍為"#__sizzle__",即d1。finally語句來最後清理,如果指定範圍的元素本身有id將其恢複為old,沒有則去掉臨時的id屬性"__sizzle__"。

 


JavaScript裡的documentquerySelectorAll()是什?

document.querySelectorAll() 是 HTML5中引入的新方法,它的使用方式與jQuery的選取器相同。
例如:
document.querySelectorAll("div");
document.querySelectorAll(".comment");
document.querySelectorAll("#userid");

由於它是HTML5原生的方法,所以不需要添加jQuery引用。
 
推薦學習 javascript 最好的書籍或教程

JavaScript權威指南(第四版)算是JavaScript最好的書了。

《JavaScript權威指南》全面介紹了JavaScript語言的核心,以及Web瀏覽器中實現的遺留和標準的DOM。它運用了一些複雜的例子,說明如何處理驗證表單資料、使用cookie、建立可移植的DHTML動畫等常見任務。本書還包括詳細的參考手冊,涵蓋了JavaScript的核心API、遺留的用戶端API和W3C標準DOM API,記述了這些API中的每一個JavaScript對象、方法、性質、建構函式、常量和事件處理常式。

網店價格(68.8元起...第一步分講得很清晰 很好 後面的參考手冊編排比較糟糕 尤其是第三、四、五部分 想快速查詢的東西真難
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.