- 浏览: 688356 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
di1984HIT:
学习了,学习了!
Tomcat的URL中文乱码解决以及传输优化 -
arottenapple:
...
我的二十一天CoreJava 学习笔记 -
黯淡流觞:
...
我的二十一天CoreJava 学习笔记 -
onlyOneToOne:
wsc830719 写道@RequestMapping(val ...
spring mvc3中 ResponseBody中文乱码 -
waj_615:
但是打印订单不是简单的string 啊
用java实现打印功能
原文地址:http://dojotoolkit.org/documentation/tutorials/1.7/using_query/
在本教程中,我们将学习dojo/query模块的搜索功能。
开始
在操作DOM对象中,一项重要的功能就是对节点的快速有效的检索。我们可以使用dom.byId来搜索一个指定ID的节点。但对于多个节点的操作这种做法显的有点繁琐,因为你要为每个你想要操作的节点都给定唯一的ID值。幸好,有另一种解决方案,使用dojo/query,这个模块使用类似于CSS搜索方式来搜索节点的列表。
搜索
为了展示如果使用搜索的,我们来使用一个经常能遇到的HTML页面内容。
<ul id="list"> <li class="odd"> <div class="bold"> <a class="odd">Odd</a> </div> </li> <li class="even"> <div class="italic"> <a class="even">Even</a> </div> </li> <li class="odd"> <a class="odd">Odd</a> </li> <li class="even"> <div class="bold"> <a class="even">Even</a> </div> </li> <li class="odd"> <div class="italic"> <a class="odd">Odd</a> </div> </li> <li class="even"> <a class="even">Even</a> </li> </ul> <ul id="list2"> <li class="odd">Odd</li> </ul>
首先,我们来取整个的列表。这时你会想到使用dom.byId,但现在我们可以使用query来操作。我们就从这个例子开始
// require the query and domReady modules require(["dojo/query", "dojo/domReady!"], function(query) { // retrieve an array of nodes with the ID "list" var list = query("#list")[0]; })
使用"#"这个前缀,是让query来搜索ID值属性的节点,这和CSS的搜索方式很类似。但有一点要注意,使用query来搜索的返回结果都是一个集合,即使只有搜索到的值返回的也是一个集合。
这个例子中虽然可以搜索到ID的节点但和dojo.byId比起来好像没什么更特殊的。但是,query是可以使用class名称来进行搜索的
// retrieve an array of nodes with the class name "odd" var odds = query(".odd");
使用"."前缀就是让query去搜索class的值为指定值的节点集合。在上面的例子中,会返回4个<li>元素和3个<a>元素
通过条件搜索
你会注意到,上面的代码会搜索出DOM中所有的符合条件的节点。如果我现在只想要在第一个list中的节点,那么会有两种方法来解决。
// retrieve an array of nodes with the class name "odd" // from the first list using a selector var odds1 = query("#list .odd"); // retrieve an array of nodes with the class name "odd" // from the first list using a DOM node var odds2 = query(".odd", document.getElementById("list"));
上面的两咱方法的返回值都是一样的。但是第一种方法是在搜索出的所有结果中来选出符合条件的集合。第二种方法是,只在一个范围中去搜索结果集合。
当query方法没有传入第二个参数时,它就会搜索整合文档来查找结果。当有第二个参数时,就会在第二个参数指定的范围内去查询结果。
如果你的文档很小,就像我们的例子一样,可以忽略第二个参数。但是如果你的页面有着很大的DOM结构,那么建设你使用带有第二个参数的query方法,它会更快更有效。
高级搜索
上面的示例中,我们搜索出了含有<li>和<a>元素的结果,但如果我们只想要<a>元素的class名为odd的结果将怎么办?使用下面的方法。
var oddA = query("a.odd");
使用节点和class名的混合查法,这会非常的有效
还有一种搜索的方法,但是这种方法不是在所有位置的样式中都有效,就是使用">"
// Retrieve an array of any a element that has an // li as its ancestor. var allA = query("li a"); // Retrieve an array of any a element that has an // li as its direct ancestor. var someA = query("li > a");
6个allA将全部使用<a>元素,但someA只有2个使用<a>元素。
节点链
上面已经说过,使用query返回的是一个集合,这个集合又被叫做NodeList,集合中的节点他们的方法可以相与的链接。我们来准备新的示例
<div id="list"> <div class="odd">One</div> <div class="even">Two</div> <div class="odd">Three</div> <div class="even">Four</div> <div class="odd">Five</div> <div class="even">Six</div> </div>
NodeList有着一些非常有用的方法,比如有一个方法叫forEach,这将循环处理每个节点
// Wait for the DOM to be ready before working with it require(["dojo/query", "dojo/dom-class", "dojo/domReady!"], function(query, domClass) { query(".odd").forEach(function(node, index, nodelist){ // for each node in the array returned by query, // execute the following code domClass.add(node, "red"); }); });
forEach有点像回调函数,每个回调的function里都有下面的几个参数。当前的节点,节点的序号,和NodeList,对于大多数开发都来说,第三个参数是可以忽略的,但有时它也会很有用。
还有一些对于NodeList有用的方法,如map,filter,every,some.除了every和some是返回boolean,其它每个方法都是返回一个NodeList,这方便于使用方法链。
在1.7版本中,把class和style的操作移动到了dojo/NodeList-dom,它提供了操作DOM的大量的方法,如
require(["dojo/query", "dojo/NodeList-dom", "dojo/domReady!"], function(query) { // Add "red" to the className of each node matching // the selector ".odd" query(".odd").addClass("red"); // Add "blue" to the className of each node matching // the selector ".even" query(".even").addClass("blue"); });
每个方法都是返回NodeList
// Remove "red" from and add "blue" to the className // of each node matching the selector ".odd" query(".odd").removeClass("red").addClass("blue");
在dojo/NodeList-dom中还有一些别的方法 style,toggleClass,replaceClass,place,empty每个方法也是都返回NodeList
// Change the font color to "white" and add "italic" to // the className of each node matching the selector ".even" query(".even").style("color", "white").addClass("italic");
事件
NodeList还有一个便利的方法,叫on,它用于链接DOM和事件。这样就不用使用大量的代码来连接事件和节点了。事件将在后续的教程学习
<button class="hookUp demoBtn">Click Me!</button> <button class="hookUp demoBtn">Click Me!</button> <button class="hookUp demoBtn">Click Me!</button> <button class="hookUp demoBtn">Click Me!</button> <script> // Wait for the DOM to be ready before working with it require(["dojo/query", "dojo/domReady!"], function(query) { query(".hookUp").on("click", function(){ alert("This button is hooked up!"); }); }); </script>
发表评论
-
dojo封装dialog提示框
2012-06-20 10:20 5658/** * 显示dojo的弹出框.前提是已经引用了相 ... -
dojo封装表单ajax提交
2012-06-20 10:16 1715/** * dojo的ajax提交form(post ... -
封装创建dojo的dialog
2012-06-18 13:55 0/** * 显示dojo的弹出框.前提是已经引用了相 ... -
自定义封装dojo通用ajax提交表单
2012-06-18 13:52 2654/** * dojo的ajax提交form(post ... -
使用dojo的dialog自定义confirm效果
2012-06-18 13:43 5125/** * 使用dojo dialog模拟confi ... -
dojo 制做非模态窗口dialog
2012-06-16 13:27 4330dojo的dialog效果基本上都是模态的,也就是说,在弹出窗 ... -
dojo1.7的加载方法
2012-06-01 17:16 4266对于dojo1.7来说,最大的变化就是引入了AMD异步加载器。 ... -
不翻译DOJO了
2012-05-16 17:57 1104翻译DOJO的时间并不长。总是感觉把老外的话翻译过来很是生硬, ... -
dojo1.7翻译 数组工具(Arrays Made Easy)
2012-05-14 10:55 1973英文地址:http://dojotoolkit.org/ ... -
dojo1.7翻译 Dijit的主题,按钮和文本框(Dijit Themes, Buttons, and Textboxes)
2012-05-03 15:52 2214原文地址:http://dojotoolkit.org/ ... -
dojo1.7翻译 动画效果(Animations)
2012-05-02 12:08 2782原文地址:http://dojotoolk ... -
dojo1.7翻译 动态效果(Dojo Effects)
2012-04-27 10:15 1322原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 处理DOM(Dojo DOM Functions)
2012-04-26 15:51 2538原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 ajax跨域请求(Getting Jiggy with JSONP)
2012-04-25 12:02 3163原文地址:http://dojotoolk ... -
dojo1.7翻译 ajax功能(Ajax with Dojo)
2012-04-24 15:04 1566原文地址:http://dojotoolk ... -
dojo1.7翻译 hello,dojo
2012-04-22 15:21 2164原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 定义类(Classy JavaScript with dojo/_base/declare)
2012-04-20 15:34 2563原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 定义模块(Defining Modules)
2012-04-18 17:21 6859原文地址:http://dojotoolkit ... -
dojo1.7翻译 通过dojoConfig来配置dojo
2012-04-18 09:20 5232原文地址:http://dojotoolk ... -
dojo1.7翻译 Hello,World
2012-04-17 10:17 1604原文地址:http://dojotoolkit.org/ref ...
相关推荐
【Dojo 1.7 中文版本注释功能说明】 Dojo 1.7 是一个重大的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的核心亮点是实现了Asynchronous Module Definition (AMD)机制,这是一项...
《Dojo 1.7 API CHM:深入理解与应用》 Dojo 是一个功能强大的JavaScript工具库,尤其在Web开发领域,它提供了一系列高级功能,包括模块化、数据管理、用户界面构建以及Ajax交互等。Dojo 1.7 API CHM文件是针对这个...
在这个版本中,Dojo提供了许多关键功能和改进,使得它成为开发者构建复杂前端应用的理想选择。 1. **模块化系统**:Dojo 1.7 引入了AMD(Asynchronous Module Definition)模块加载机制,这允许异步加载JavaScript...
【Dojo 1.7 知识点详解】 Dojo 1.7 是 Dojo Toolkit 重要的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的主要焦点在于Asynchronous Module Definition (AMD),这是一种优化...
在Dojo 1.7 中,这些功能被重新组织并模块化,使得开发者可以根据需要按需加载,显著提高了页面加载速度。AMD模块化系统的引入是这一版本的一大亮点,它允许异步加载和依赖管理,使得代码结构更加清晰,也更利于维护...
手册中列举了一些常用的Dojo包,如dojo.io用于不同类型的IO传输,dojo.dnd提供拖放功能的API,dojo.string提供了字符串处理方法,dojo.date帮助解析和操作日期,dojo.event处理事件驱动和AOP开发,dojo.back管理撤销...
《Dojo 1.7 深入解析与应用实践》 Dojo 是一个全面的JavaScript工具库,专为构建富互联网应用程序(RIA)而设计。这个“dojo-release-1.7.1-src”压缩包包含了Dojo 1.7.1的源代码,为开发者提供了深入了解和自定义...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,尤其在构建复杂的、企业级的AJAX应用程序方面表现出色。"dojo-release-1.7.3"是Dojo框架的一个特定版本,发布于2012年,这个版本在1.7系列...
在IT行业中,Dojo是一个广泛使用的JavaScript库,它提供了丰富的功能来处理前端开发中的各种任务,包括构建复杂的用户界面和处理数据结构。本篇将详细探讨"dojo任意级树的节点转移"这一主题,它是Dojo框架在处理树形...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作、事件处理到AJAX通信等多个方面。Dojo的核心在于它的模块化系统,这使得开发者可以按需加载代码,提高应用的性能和可维护...
2. **dojo.NodeList**: dojo.query返回的是一个dojo.NodeList对象,它扩展了Array原型,提供了许多便利的方法,如`forEach`、`filter`、`map`等,使得遍历和操作DOM节点变得更加简单。此外,NodeList还支持样式操作...
`dojo/request`是Dojo 1.7引入的新API,它对xhr进行了封装,提供了更简洁的接口。 在实际开发中,Dojo的工具集如Build System也十分有用。它允许开发者对项目进行优化,包括合并、压缩和混淆JavaScript及CSS文件,...
例如,`dojo/query("selector")` 可以获取匹配的DOM节点集合,而 `dojo/on` 模块则用于事件监听。 2. **模块管理**:Dojo 采用AMD(Asynchronous Module Definition)模块加载机制,允许开发者按需加载和组织代码。...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作、事件处理到AJAX通信、动画效果等各个方面。在"dojo开发文档"中,我们可以深入学习Dojo的核心特性和使用方法,提升我们的...
Dojo 是一个开源的 JavaScript 库,它为 Web 开发提供了丰富的功能和工具,包括 UI 控件、模块管理、数据处理和动画效果等。这个压缩包包含了 Dojo 的源代码及其示例,是深入理解 Dojo 工作原理和实践应用的好材料。...
Dojo 1.7 引入了AMD,这是一种异步模块定义的加载机制,允许开发者按需加载模块,提高了页面性能。通过`require()`函数,我们可以方便地引入和依赖其他模块。 2. **Dijit UI 库:** Dijit是Dojo的UI组件库,包含...
在本文中,我们将深入探讨如何使用Dojo工具库与Servlet技术来实现一个基本的登录功能。Dojo是一个强大的JavaScript框架,提供了丰富的UI组件和数据处理功能,而Servlet是Java服务器端编程的重要组成部分,用于处理...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括DOM操作、事件处理、动画效果、模块管理、数据存储等。在深入理解Dojo源码之前,我们首先需要对JavaScript库和模块化开发有一个基本的...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,尤其在AJAX、DOM操作、动画效果以及模块化开发等方面表现卓越。"dojo-release-1.2.1-demos" 是一个针对Dojo 1.2.1版本的示例集合,非常适合...
3. **dojo/dom和dojo/query**:这两个模块提供了DOM操作功能,包括查找、修改和操作DOM节点。在源代码中,你会看到如何利用dojo/query选择元素,并使用dojo/dom进行属性修改和事件绑定。 4. **dojo/on和dojo/event*...