Dojo------DOM基础之Query

匆匆过客 提交于 2020-02-24 08:59:50

使用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>

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!