深入了解Dojo核心接口简介(三)

dojo/query

这个 dojo/query 模块相信读者们也是非常熟悉了,它主要是基于 CSS 的 Selector 来定位并返回相应节点。其实它使用起来非常简单,本小节我们会重点它的一些不太为人知的特殊功能。

先来看一个基本使用方式的示例:

清单 46. dojo/query 简单示例

require(["dojo/query", "dojo/dom"], function(query, dom){ var nl = query(".someClass", "someId"); // 或者 var node = dom.byId("someId"); nl = query(".someClass", node); });

其主要参数其实很简单,第一个是 Selector 的内容,第二个是根节点的 ID 或者节点对象。这里我们就是查找节点 ID 为“someId”的节点的所有子节点中,包含 someClass 的 Class 属性的所有节点。dojo/query 返回值(这里是 nl)其实是一个 dojo/NodeList 对象,不是我们通常认为的数组对象。当然,它支持数组对象支持的下标运算符“[]”,但是它还包括很多额外的方法,如:concat,forEach,map,on,last">IndexOf 等等。所以要注意,我们不能简单的把它当成数组对象来对待。

同样,还有 dojo/NodeList-data,dojo/NodeList-dom,dojo/NodeList-fx,dojo/NodeList-html,dojo/NodeList-traverse 等等对象,它们扩展了 dojo/NodeList,实现了一些新的功能,如 dojo/NodeList-dom 在 dojo/NodeList 基础上扩展了一些 DOM 操作的接口,让我们可以很方便的批量执行一些 DOM 操作。dojo/NodeList-fx 扩展了一些动画接口,可以批量执行动画。这些接口相信很多读者之前就已经接触过了,这里不再深入,在希望未接触过的读者能注意一下,这些模块对于我们使用 dojo/query 非常有帮助。

再来看一些稍微复杂一点的示例:

清单 47. dojo/query 复杂示例

dojo.query('#t span.foo:not(span:first-child)'), dojo.query('#t span.foo:not(:first-child)') dojo.query('#t h3:nth-child(odd)'), dojo.query('#t h3:nth-child(2n+1)') dojo.query('#t2 > input[type=checkbox]:checked')

前两个例子会返回 ID 为“t”的节点下面,所有的不是其上层节点的第一个子节点的,并且 Class 属性为“foo”或者包含“foo”的所有 span 节点。

后两个例子会返回 ID 为“t”的节点下面,所有为其上层节点的奇数子节点的 h3

节点。

最后一个例子会返回 ID 为“t2”的节点下面,所有被选中的 checkbox 节点。

dojo/query 支持所有的 CSS3 的 Selector,感兴趣的读者可以参考一下 W3C 的关于 CSS3 的标准的定义,其中定义的所有 Selector 均可以用在 dojo/query 中。

既然我们是基于 CSS 的 Selector 来定位并返回节点的,那我们到底是基于哪个版本的 CSS 的 Selector 算法呢?事实上,dojo/query 支持四种 Selector 模式:CSS2,CSS2.1,CSS3,ACME。相比前三个大家都很熟悉了,第四个 ACME 其实是 CSS3 的进阶,除了支持所有 CSS3 的 Selector 外,它还支持一些 Selector 引擎不支持的的检索规则。默认情况下,如果设定 async 为 false,dojo/query 会使用 ACME 模式,如果 async 为 true,则使用 CSS3。

我们可以通过 dojoConfig 来定义我们所使用的 Selector 模式,也可以在引用 dojo/query 模块的时候指定:

清单 48. dojo/query 的 Selector 模式定义

<script data-dojo-config="selectorEngine: 'css2.1', async: true" src="dojo/dojo.js"> </script> <script type="text/javascript"> var dojoConfig = { selectorEngine: "css2.1", async: true }; </script> <script src="dojo/dojo.js"> define(["dojo/query!css3"], function(query){ query(".someClass:last-child").style("color", "red"); });

时间: 2024-09-15 07:11:50

深入了解Dojo核心接口简介(三)的相关文章

深入了解Dojo核心接口简介(一)

Dojo 的强大不仅仅在于它提供的各种控件,还在于它提供的面向对象的http://www.aliyun.com/zixun/aggregation/12894.html">开发模式,以及各种应用级别的框架.除此以外,更值得一提的是:Dojo 提供了很多很强大的核心接口,基于这些接口,我们可以高效快捷的实现应用中所需要的各种逻辑和算法.这些接口支持各种浏览器,使得我们不用再去考虑浏览器差别所带来的各种实现问题. Dojo 的这些接口大大简化了我们的 Web 前端开发的复杂度,使得我们能够在更

深入了解Dojo核心接口简介(二)

核心功能接口 了解了 Dojo 的核心基础接口,我们可以转入 Dojo 的http://www.aliyun.com/zixun/aggregation/17626.html">核心功能接口了.Dojo 包括了大量的强大的核心功能,这些功能给我们的日常开发带来了相当多的帮助和便利.但是正是由于 Dojo 如此的完善和丰富,导致很多读者在使用过程中无暇顾及它所有的方面,很多非常实用的接口至今还不被大多数人所知晓和熟悉.接下来,我们会略过大家都比较熟悉的一些功能接口(如 forEach,add

Hibernate核心接口简介

接口 在项目中使用Hibernate框架,非常关键的一点就是要了解Hibernate的核心接口.Hibernate接口位于业务层和持久化层,如图1所示. 图1 Hibernate核心接口的层次架构关系 Hibernate的核心接口一共有5个,分别为:Session.SessionFactory.Transaction.Query和Configuration.这5个核心接口在任何开发中都会用到.通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制.下面对这五的核心接口分别加以介绍. ·S

使用Dojo的Ajax应用开发进阶教程,第7部分: Dojo核心库深入介绍

Dojo 核心库构建于 Dojo 基本库之上,为 Ajax 应用的开发提供了更加丰富的功能.掌握 Dojo 核心库中包含的内容,可以开发人员减少代码量,而把工作精力集中在与业务逻辑相关的组件的实现上.Dojo 核心库中包含的内容也比较多,本文只是介绍其中一些比较重要或是复杂的部分.首先从数据模型开始介绍. 数据模型 在传统的 Web 应用中,客户端部分所承担的职责很少,基本上只负责数据展现.应用所涉及的复杂数据模型的处理工作由服务器端代码来完成.而在 Ajax 应用中,客户端部分也需要处理一部分

[Apache commons系列]DBUtils简介-2.核心类简介

inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ). DbUtils是一个小型的类库,不需要也不值得花太长的时间去熟悉每一个类.DbUtils核心其实只有三个类/接口,即QueryRunner .ResultSetHandler 和DbUtls (官方文档中写的是前两个).(来源:http://blog.csdn.net/inkfish)   一.下面先过一下DbUtils的几个包(package):(来源:http://blog.

SQLite教程(二):C/C++接口简介_SQLite

一.概述:     在SQLite提供的C/C++接口中,其中5个APIs属于核心接口.在这篇博客中我们将主要介绍它们的用法,以及它们所涉及到的核心SQLite对象,如database_connection和prepared_statement.相比于其它数据库引擎提供的APIs,如OCI.MySQL API等,SQLite提供的接口还是非常易于理解和掌握的.     二.核心对象和接口:     1. 核心对象:     在SQLite中最主要的两个对象是,database_connectio

领悟网站优化核心仅需三要素

网站优化一直都是具有争议性的热门话题,有些站长朋友会认为网站优化无非就是内容优化与外链发布,但网站优化真正的核心却是在于内部结构的优化,俗话说:工欲善其事.必先利其器,把网站内部结构优化好,那么做起网站优化来就事半功倍了. 一.程序选择篇 1.适合自己的才是最好的 对于网站程序来说也是相同的道理,程序即使再强大,自己对它不了解.不熟悉也是白搭,反而网站程序的功能虽然简单,而自己对它却是了如指掌,使用起来得心应手,那才是自己应该选择的网站程序. 2.程序语言需符合搜索引擎 对搜索引擎友好的网站程序

wx-HTML5做微信sdk接口对接三个数值 用js怎么得到

问题描述 HTML5做微信sdk接口对接三个数值 用js怎么得到 写了三个隐藏域,将后台生成的三个值传到它们的value里js获取对吗? wx.config({ debug: true, appId: 'wx06907b4646541e4b', timestamp: $("input[id$='timestamp']").val(), nonceStr: $("input[id$='nonceStr']").val(), signature: $("inp

hibernate-新手求助!Hibernate中如何把几个核心接口写在一个工具类中?

问题描述 新手求助!Hibernate中如何把几个核心接口写在一个工具类中? 要写一个Struts2+Hibernate 整合的CRUD , 然后不知道怎么把 Session.SessionFactory.Configuration.Transaction这几个类写在 util包中的工具类里?求各位大神解答一下.万分感谢!!! 解决方案 定义一个类,把这些作为内嵌类全部贴过来 解决方案二: http://m.blog.csdn.net/blog/StubbornPotatoes/7705693