标签:
使用DOM,最重要的是快速有效的检索节点
dojo/query模块检索一个节点列表,支持CSS3的选择器
一、查询
比如以下html:
1 <ul id="list"> 2 <li class="odd"> 3 <div class="bold"> 4 <a class="odd">Odd</a> 5 </div> 6 </li> 7 <li class="even"> 8 <div class="italic"> 9 <a class="even">Even</a> 10 </div> 11 </li> 12 <li class="odd"> 13 <a class="odd">Odd</a> 14 </li> 15 <li class="even"> 16 <div class="bold"> 17 <a class="even">Even</a> 18 </div> 19 </li> 20 <li class="odd"> 21 <div class="italic"> 22 <a class="odd">Odd</a> 23 </div> 24 </li> 25 <li class="even"> 26 <a class="even">Even</a> 27 </li> 28 </ul> 29 30 <ul id="list2"> 31 <li class="odd">Odd</li> 32 </ul>
dojo代码如下:
1 // require the query, dom, and domReady modules 2 require(["dojo/query", "dojo/dom", "dojo/domReady!"], function (query, dom) { 3 // retrieve an array of nodes with the ID "list" 4 var list = query("#list")[0]; 5 })
类似于css的选择器,
查询总是返回一个数组
也可以通过类名来检索节点
1 // retrieve an array of nodes with the class name "odd" 2 var odds = query(".odd");
二、限制查询
1 // retrieve an array of nodes with the class name "odd" 2 // from the first list using a selector 3 var odds1 = query("#list .odd");
在所有的dom中限制结果
1 // retrieve an array of nodes with the class name "odd" 2 // from the first list using a DOM node 3 var odds2 = query(".odd", dom.byId("list"));
在指定的dom节点中限制范围
如果没有指定第二个参数,将会搜索整个DOM结构
对于大型DOM,最好使用第二个参数限制查询
三、更高级的选择
1 var oddA = query("a.odd"); 2 3 // Retrieve an array of any a element that has an 4 // li as its ancestor. 5 var allA = query("li a"); 6 // Retrieve an array of any a element that has an 7 // li as its direct parent. 8 var someA = query("li > a");
四、NodeList
查询返回的数组实际是一个dojo/NodeList
考虑如下html:
1 <div id="list"> 2 <div class="odd">One</div> 3 <div class="even">Two</div> 4 <div class="odd">Three</div> 5 <div class="even">Four</div> 6 <div class="odd">Five</div> 7 <div class="even">Six</div> 8 </div>
dojo代码如下:
1 // Wait for the DOM to be ready before working with it 2 require(["dojo/query", "dojo/dom-class", "dojo/domReady!"], 3 function(query, domClass) { 4 5 query(".odd").forEach(function(node, index, nodelist){ 6 // for each node in the array returned by query, 7 // execute the following code 8 domClass.add(node, "red"); 9 }); 10 11 }); 12 13 14 require(["dojo/query", "dojo/NodeList-dom", "dojo/domReady!"], function(query) { 15 // Add "red" to the className of each node matching 16 // the selector ".odd" 17 query(".odd").addClass("red"); 18 // Add "blue" to the className of each node matching 19 // the selector ".even" 20 query(".even").addClass("blue"); 21 }); 22 23 // Remove "red" from and add "blue" to the className 24 // of each node matching the selector ".odd" 25 query(".odd").removeClass("red").addClass("blue"); 26 27 28 // Change the font color to "white" and add "italic" to 29 // the className of each node matching the selector ".even" 30 query(".even").style("color", "white").addClass("italic");
五、Events
考虑如下html:
1 <button class="hookUp demoBtn">Click Me!</button> 2 <button class="hookUp demoBtn">Click Me!</button> 3 <button class="hookUp demoBtn">Click Me!</button> 4 <button class="hookUp demoBtn">Click Me!</button>
dojo代码如下:
1 <script> 2 // Wait for the DOM to be ready before working with it 3 require(["dojo/query", "dojo/domReady!"], function(query) { 4 query(".hookUp").on("click", function(){ 5 alert("This button is hooked up!"); 6 }); 7 }); 8 </script>
标签:
原文地址:http://www.cnblogs.com/becauseCode/p/5714812.html