`

dojo1.7翻译 搜索节点功能(Using dojo/query)

    博客分类:
  • Dojo
 
阅读更多

原文地址: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>

 运行示例

 

0
0
分享到:
评论

相关推荐

    Dojo 1.7 中文版本注释功能说明

    【Dojo 1.7 中文版本注释功能说明】 Dojo 1.7 是一个重大的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的核心亮点是实现了Asynchronous Module Definition (AMD)机制,这是一项...

    Dojo1.7 Api chm

    《Dojo 1.7 API CHM:深入理解与应用》 Dojo 是一个功能强大的JavaScript工具库,尤其在Web开发领域,它提供了一系列高级功能,包括模块化、数据管理、用户界面构建以及Ajax交互等。Dojo 1.7 API CHM文件是针对这个...

    dojo 1.7 最新dojo包,内含最新的实例若干个。

    在这个版本中,Dojo提供了许多关键功能和改进,使得它成为开发者构建复杂前端应用的理想选择。 1. **模块化系统**:Dojo 1.7 引入了AMD(Asynchronous Module Definition)模块加载机制,这允许异步加载JavaScript...

    Dojo 1.7 版本注释.docx

    【Dojo 1.7 知识点详解】 Dojo 1.7 是 Dojo Toolkit 重要的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的主要焦点在于Asynchronous Module Definition (AMD),这是一种优化...

    dojo 源码1.7汇总

    在Dojo 1.7 中,这些功能被重新组织并模块化,使得开发者可以根据需要按需加载,显著提高了页面加载速度。AMD模块化系统的引入是这一版本的一大亮点,它允许异步加载和依赖管理,使得代码结构更加清晰,也更利于维护...

    DOJO API 中文参考手册,附加注解实例(精心重新排版DOC文档)

    手册中列举了一些常用的Dojo包,如dojo.io用于不同类型的IO传输,dojo.dnd提供拖放功能的API,dojo.string提供了字符串处理方法,dojo.date帮助解析和操作日期,dojo.event处理事件驱动和AOP开发,dojo.back管理撤销...

    dojo-release-1.7.1-src

    《Dojo 1.7 深入解析与应用实践》 Dojo 是一个全面的JavaScript工具库,专为构建富互联网应用程序(RIA)而设计。这个“dojo-release-1.7.1-src”压缩包包含了Dojo 1.7.1的源代码,为开发者提供了深入了解和自定义...

    dojo-release-1.7.3

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,尤其在构建复杂的、企业级的AJAX应用程序方面表现出色。"dojo-release-1.7.3"是Dojo框架的一个特定版本,发布于2012年,这个版本在1.7系列...

    dojo任意级树的节点转移

    在IT行业中,Dojo是一个广泛使用的JavaScript库,它提供了丰富的功能来处理前端开发中的各种任务,包括构建复杂的用户界面和处理数据结构。本篇将详细探讨"dojo任意级树的节点转移"这一主题,它是Dojo框架在处理树形...

    dojo dojo实例 dojo例子 dojo资料 dojo项目 dojo实战 dojo模块 dojo编程

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作、事件处理到AJAX通信等多个方面。Dojo的核心在于它的模块化系统,这使得开发者可以按需加载代码,提高应用的性能和可维护...

    dojo1.6关于DOM相关操作的官方介绍

    2. **dojo.NodeList**: dojo.query返回的是一个dojo.NodeList对象,它扩展了Array原型,提供了许多便利的方法,如`forEach`、`filter`、`map`等,使得遍历和操作DOM节点变得更加简单。此外,NodeList还支持样式操作...

    图书:Dojo入门

    `dojo/request`是Dojo 1.7引入的新API,它对xhr进行了封装,提供了更简洁的接口。 在实际开发中,Dojo的工具集如Build System也十分有用。它允许开发者对项目进行优化,包括合并、压缩和混淆JavaScript及CSS文件,...

    dojo 一个小的例子

    例如,`dojo/query("selector")` 可以获取匹配的DOM节点集合,而 `dojo/on` 模块则用于事件监听。 2. **模块管理**:Dojo 采用AMD(Asynchronous Module Definition)模块加载机制,允许开发者按需加载和组织代码。...

    dojo开发文档

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作、事件处理到AJAX通信、动画效果等各个方面。在"dojo开发文档"中,我们可以深入学习Dojo的核心特性和使用方法,提升我们的...

    DOJO源代码

    Dojo 是一个开源的 JavaScript 库,它为 Web 开发提供了丰富的功能和工具,包括 UI 控件、模块管理、数据处理和动画效果等。这个压缩包包含了 Dojo 的源代码及其示例,是深入理解 Dojo 工作原理和实践应用的好材料。...

    dojo最新版本

    Dojo 1.7 引入了AMD,这是一种异步模块定义的加载机制,允许开发者按需加载模块,提高了页面性能。通过`require()`函数,我们可以方便地引入和依赖其他模块。 2. **Dijit UI 库:** Dijit是Dojo的UI组件库,包含...

    dojo+servlet 完成登录功能

    在本文中,我们将深入探讨如何使用Dojo工具库与Servlet技术来实现一个基本的登录功能。Dojo是一个强大的JavaScript框架,提供了丰富的UI组件和数据处理功能,而Servlet是Java服务器端编程的重要组成部分,用于处理...

    dojo源码

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括DOM操作、事件处理、动画效果、模块管理、数据存储等。在深入理解Dojo源码之前,我们首先需要对JavaScript库和模块化开发有一个基本的...

    dojo-release-1.2.1-demos

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,尤其在AJAX、DOM操作、动画效果以及模块化开发等方面表现卓越。"dojo-release-1.2.1-demos" 是一个针对Dojo 1.2.1版本的示例集合,非常适合...

    Dojo权威指南源代码

    3. **dojo/dom和dojo/query**:这两个模块提供了DOM操作功能,包括查找、修改和操作DOM节点。在源代码中,你会看到如何利用dojo/query选择元素,并使用dojo/dom进行属性修改和事件绑定。 4. **dojo/on和dojo/event*...

Global site tag (gtag.js) - Google Analytics