Dojo 1.6 最新官方教程: 如何使用dojo.query 进行DOM查询和批量操作

Delphi中的ADOquery 用法 Delphi中的ADOquery 用法Delphi中的ADOquery 用法Delphi中的ADOquery 用法 立即下载

 

在本讲义中,我们将学到DOM的查询,以及如何使用dojo.query来方便的查找并操作DOM节点。

 

难度:初学者  适用的Dojo 版本: 1.6

作者: Bryan Forbes

译者: feijia

原文连接: http://dojotoolkit.org/documentation/tutorials/1.6/using_query/

 

入门

 

对DOM编程的一个关键要素是能够快速高效的获取到你所要使用的节点。之前我们曾经介绍过使用dojo.byId来查找DOM节点的方法。但是,这种方法的局限性也很明显。你很难为页面上每个节点都起一个唯一的ID;而且通过dojo.byId查找得到的总是单个节点,当你需要对一组节点做同样的动作时,dojo.byId 就无能为力了。解决这些局限的方法就是我们今天将要介绍的:dojo.query 。 dojo.query 方法使用了类似CSS查询的方式来获取一组节点,在新版的dojo当中,它甚至已经完全可以支持高级的CSS3 选择器(selector )了。

 

常用查询

 

为了演示一些最常用的DOM查询示例,我们假设了如下的一个HTML页面片段. (这是常见的包含一系列链接的HTML片段)

   

 

针对上述的HTML片段,能想到的第一个操作通常是如何获取到整个列表的一个句柄. 当然你可以用dojo.byId, 但dojo.query 也可以达到同样目的. 虽然初看起来,你会觉得在这里dojo.query 不是那么方便,但结合后面的例子你就会发现它的好处。

 

 

通过在参数中加入"#", 我们告诉dojo.query 去查找节点的"ID"属性。这是从CSS操作中借鉴来的语法。 需要注意的是dojo.query 的返回值永远是一个数组。 在这个例子中,因为只有一个ID叫"list" 的节点,所以我们直接取出了该数组的第一个元素。 

 

上面我们看到了如何通过ID来获取节点,dojo.query 可不是只有这么点能力。它还支持通过class name来选择节点。假设我们希望能够获取所有class name等于"odd" 的节点:

 

 

通过在参数中加入".", 我们告诉dojo.query 现在是要匹配节点的className属性, 这也是借鉴了CSS的语法。在这个例子中,dojo.query 将会返回包含4个<li> 节点和3个<a>节点 的数组。 

 

限定查询条件的作用域

 

你可能已经发现了,在上一个例子中的得到odds数组同时包含了来自两个列表的节点。 假设我们只需要获取第一个列表中的odd节点呢? 有两种方法

 

 

这两种方法返回的都是相同的元素, 第一个方法使用了选择器的语法,限制了查询的结果在ID为list的元素内,而第二个方法则将一个节点作为限定查询参数传入query。 

 

当dojo.query 方法不包含第二个参数时,它会搜索整个DOM树结构,遍历<HTML>标签中包含的每个节点。  如果该方法调用时包含了一个DOM节点作为第二参数,这个节点就是查询的作用域, 查询的结果一定是该节点或其子节点。

 

 

如果你的页面的DOM树结构比较小,比如像我们这里使用的列表的例子,那么省略第二参数的做法是可以的,也不会过分影响效率。但是如果页面很复杂,那么强烈建议你在使用dojo.query是明确指定第二参数来限定查询的作用域.这会大大减少无谓的对整个页面进行搜索操作从而提升速度和性能。

 

为了方便,在接下来的例子中,我们都会省略第二个参数,不过请你一定要记住:在真实应用中你应该尽可能的制定作用域来让查询操作快速高效。

 

更多高级的查询

 

前面的例子中,我们查询得到的结果集包含了<li> 节点和<a> 节点两种,如果我们只想要其中的<a> 节点该如何做呢?  在dojo.query 查询时我们可以将 标签名和class 名组合作为查询条件:

 

 

 

 

 

dojo.query 还支持另一种选择器, ">".  CSS中使用">" 并不被所有浏览器支持,但是在dojo.query中却可以通用. 

使用这个选择器,查询会

 

查看示例

在我们的例子中,allA会查询出6个<a>节点,而someA只会包含2个<a>。 在">" 两侧可以使用任意的其他选择器,包括class 选择器。这里我们只是介绍了几种最常用的选择器,但dojo.query 是完全兼容CSS3的,还能够支持很多其他的选择器 .你可以自己进一步学习掌握.

NodeList(操作dojo.query返回的结果集)

 

前文提到,dojo.query 返回的是匹配查询结果的所有节点构成的数组;这个数组实际上是一个特殊的数组对象称为dojo.NodeList, 该数组对象内建了一系列可以方便操作其中节点的方法. 

 

下面我们来看一下其中常用的一些方法, 在这个章节我们会使用下面的一个HTML代码片段:

 

 

dojo.NodeList 内建了一些Dojo 数组辅助方法. 例如forEach, 它可以对数组中的每个元素执行一个函数:

 

 

被传入forEach的函数是一个回调函数,该回调函数支持3个参数: 当前正在操作的节点,该节点在数组中的位置序号,以及当前正在遍历的结果集(是一个dojo.NodeList 对象)

 

对大多数开发者而言,第三个参数一般用不到, 仅当你在回调函数中需要去操作结果集中的其他节点时需要用到这个参数. forEach方法还可以接受第二个参数,作为回调函数调用的作用域(Scope)

 

dojo.NodeList中内建的其他数组辅助方法还包括: map,filter,every, 和 some. 大多方法都返回一个dojo.NodeList 对象,因此很容易串联使用. some 和every是例外,它们返回值是布尔值(boolean)

 

dojo.NodeList还内建了一些方面DOM操作的方法, 上一个例子还可以进一步简化为

 

 

 

这些DOM操作方法会在dojo.NodeList中每个节点上执行,同事返回值仍然是一个dojo.NodeList,可以串联使用.例如

 

 

其他dojo.NodeList 的DOM操作方法还包括: style, toggleClass,replaceClass, place 和empty. 所有这些方法都会返回dojo.NodeList,供串联使用.

 

 

 

 

事件

dojo.NodeList 上提供的另一重要方法是connect,用来连接DOM事件. 关于如何在Dojo中处理DOM事件会在下一个讲义中详细讨论,我们这里要解释一下如何使用dojo.NodeList的connect方法.

 

特别要注意的是,虽然在dojo.NodeList上使用connect很方便,但是并不适用于dojo.NodeList 包含大量节点的情形, 这种情况下应该使用一种称为事件代理(event delegation)的技巧.关于这一技巧我们会在未来的讲义中探讨.

 

 

上面的例子中我们演示了两种将dojo.NodeList连接到DOM事件的方法:

 

通用的connect 方法, 参数中指定事件名称和回调函数

使用一系列预定义的onXXXX 方法, 完整的方法列表 可以在参考手册中查找

 

第二种做法更加简洁一些,但是内建的onXXX方法仅包含了标准的DOM事件, 对于一些非标准事件例如 DOMAttrModified, 则只能使用第一种方法.

 

小结

利用dojo.query 以及dojo.NodeList,对批量的DOM节点进行操作是很简单的:

使用dojo.query 查询到你所需要操作的节点,再使用dojo.NodeList的内建方法对这些节点进行修改操作. 下面一章我们将会进一步介绍如何使用Dojo向页面中添加互动,如何使用dojo中的事件机制。 

 

FPGA优质开源项目 – UDP万兆光纤以太网通信 本文开源一个FPGA项目:UDP万兆光通信。文章末尾有该工程源码获取方式,有需要的小伙伴可以点赞、分享支持一下~ 阅读详情

相关推荐

Autodesk激活无无网络选项?许可类型与脱机激活排查修复指南

软件许可激活是保障正版授权正常使用的核心环节,常见的授权模式包括单机版许可和网络版许可,两者在认证机制和应用场景上有所区别。单机版离线授权依托 FlexNet Licensing Service 等底层服务组件,在断网或内网环境下为用户提供可靠的技术支持与授权验证路径。然而在实际部署中,激活窗口并不总是显示“无网络激活方式”入口,这可能与许可类型选择、网络环境干扰、组件安装残留或系统时间偏差有关。理解入口的动态呈现逻辑与排查顺序,有助于在 AutoCAD、Revit 等 Autodesk 产品中高效解决脱机

weixin_28709649的博客 355

iCMS后台do_query函数存在SQL注入漏洞

目录 该漏洞CNVD-ID: CNVD-2019-08479 漏洞提交CNVD后,待CNVD公示才发出本文。 测试环境: 程序版本:v7.0.14 Windows + firefox + burpsuite + apache2 + PHP5.6.27(phpStudy集成环境) iCMS官网:https://www.icmsdev.com/ 一、漏洞分析 /app/database/databas...

云雕的博客 1140

【RL+空战】学习记录01:jsbsim 仿真环境初次学习,F16 战机起飞

【代码】【RL+空战】学习记录01:jsbsim 仿真环境初次学习,F16 战机起飞。

weixin_41369892的博客 902

JavaScript DOM

DOM简介 浏览器加载HTML文档时,会将HTML文档解析为一个树形结构,称为DOM树 HTML文档和DOM树是一一对应的关系 当DON树被改变时,与之对应的HTML文档也会随之改变 当需要对HTML中内容进行动态改变时,可以使用DOM来进行操作 DOM提供了一组用来操作HTML文档的API,即提供一套属性,方法和事件 树上的每一个节点都是一个DOM对象,树的顶层为document对象,表示整个文档 ...

weixin_47906106的博客 996

实测有效!易灵思FPGA工程如何正确配置Efinity+Modelsim仿真环境

本文详细介绍了易灵思FPGA工程中如何高效配置Efinity与Modelsim联合仿真环境,包括软件版本匹配、系统环境变量设置、工程文件结构优化及仿真脚本深度优化等实战经验。通过实测数据验证,该方案可显著提升仿真效率,适用于不同规模的设计验证,帮助工程师快速搭建稳定高效的联仿环境。

m2n3b4v5c6的博客 405

银河麒麟v10(x86_64)升级openssh实操成功

本文详细介绍了在银河麒麟V10系统上将OpenSSH从8.2p1升级至9.9p2版本的全过程。主要内容包括:系统环境确认、安装telnet备用连接、备份配置、卸载旧版本、安装新版本、服务配置与验证等关键步骤。特别强调了安全注意事项,如必须安装telnet作为备用连接、重要配置备份等。升级后提供了安全加固建议,包括修改SSH端口、禁用root登录等。文章还包含详细的故障排查方法和恢复方案,确保升级过程安全可靠。通过本教程,用户可以顺利完成OpenSSH版本升级,提升系统安全性。

淘淘小窝 1090

DTO-VO-DO-Query理解

POJO/PO/DO/Entity/DTO/VO/Query个人理解

qq_41901039的博客 1142

安装Anaconda和Labelme的教程

1 登录Anaconda官网,选择Download https://www.anaconda.com/distribution/ 2 选择你想下载的Python版本,选择你的操作系统和位数,然后点击Download按钮就开始下载了 3 开始安装 下面两个框框都勾选 点击next,等待安装成功 打开Anaconda Navigator 点击红色圈圈的按钮 在cmd中输入 (1)创建虚拟环境 conda create -n labelme python=3.6 (2)激活虚拟环境 conda activa

qq_42178122的博客 3811

MyBatis源码分析(05)执行查询SQL

前面的获取对象的过程基本都debug完了,下面看最后一行: String name = mapper.selectNameById(1); 也就是执行SQL语句的具体过程。 下面从SQL语句的执行开始debug: 1、String name = mapper.selectNameById(1); 我们自定义的接口UserMapper是个接口,没有实现类,前面分析获取mapper时我们知道,mybatis会为mapper类生成代理类,生成代理类的方法是使用Mapp...

Blues的专栏 502

ROS 2 Jazzy与Gazebo Harmonic仿真实战:从零搭建机器人仿真环境与高级应用

本文详细介绍了如何使用ROS 2 Jazzy和Gazebo Harmonic从零搭建机器人仿真环境,涵盖环境配置、传感器集成、多机器人协同和GPU加速优化等高级应用。通过实战案例和性能调优技巧,帮助开发者高效构建可靠的机器人仿真系统,提升开发效率。

h9j8k7l6m5n的博客 1218

kettle连接达梦资源库数据库插件

kettle自定义插件plugin database plugin 达梦插件 dm插件

weixin_42122126的博客 2170

Dojo 1.6 最新官方教程 如何使用dojo.query 进行DOM查询和批量操作 .

在本讲义中,我们将学到DOM的查询,以及如何使用dojo.query来方便的查找并操作DOM节点。   难度:初学者  适用的Dojo 版本: 1.6 作者: Bryan Forbes 译者: feijia 原文连接: http://dojotoolkit.org/documentation/tutorials/1.6/using_query/   入门   对DOM编程的...

qq_30279255的博客 213

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

dojo中关于dom的操作

dojo中关于dom操作的有以下几个模块: dojo/dom模块 dojo/dom-construct模块 dojo/dom-attr模块 dojo/dom-prop模块 dojo/dom-class模块 dojo/dom-style模块 dojo/dom-form模块 1. dojo/dom模块 该模块定义了核心Dojo DOM API。该模...

shiyangxu的博客 635

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

web前端之精通dojo七:DOM工具

web前端之精通dojo七:DOM工具 文档:DOM中的”D”: 如果没有document(文档),DOM无从谈起。 对象:DOM中的”O”: 用户定义对象(user-defined object):有程序员自行创建的对象 内建对象(native object):内建在JavaScript语言里的对象,如Array、Math、Date等 宿主对象(host object):由浏览器提供的对象,如windo

爸爸去哪了2之熊猫三胞胎的博客 1060

使用dojo/query

当我们操作DOM时快速高效的检索 节点时非常重要的。我们之前使用dom.byId。然而为我们感兴趣的每个节点指定一个唯一的Id 是一个可怕的和不切实际的工作。使用ID查找和操作多个节点是效率低下的。 还好我们有另一个解决方案dojo/query模块。 dojo/query使用我们熟悉的css选择器 检索一系列的节点。包括对先进的CSS3 选择器的支持。 查询 为了展示一些常用的查询,我们将

giveyousool的专栏 2681

dojo是怎么加载html的,dojo获取dom节点的步骤

dojo获取dom节点的方法1. 通过id获取dom节点如果要对html文档中的元素进行处理时,我们一般会为该节点设置一个id属性;在dojo中,提供了一个通过id获取节点的简洁方式。如果要获取如下节点:使用js获取该节点:document.getElementById("username");使用dojo获取该节点:dojo.byId("username");注意:如果没有找到指定id的节点,返...

weixin_28782221的博客 293

Dojo1.11官方教程文档翻译(3.2)使用dojo/query

本教程中,我们将学习DOM查询和如何使用dojo/query来选择节点。

碎梦道 751

dojo的API功能介绍

文章目录一、dojo常见API1、dojo/_base/declare(1)作用:该模块用于声明一个类,类似于js 的class的作用。(2)用法:declare(className, superClass, properties)(3)案例(4)参考链接2、dojo/_base/lang(1)作用:就是一个扩展模块,提供了一些有用的方法(2)用法:部分函数说明(3)案例(4)参考链接3、dojo/_base/array(1)作用:封装了数组中的一些方法。类似于JS当中数组(2)用法:跟JS的数组的方法使用

Litt_White的博客 2840

dojo query 实现Ajax,Dojo Query 详解

Dojo Query 简介在 Web 开发中,我们经常需要根据一定的条件查询并获取某些 HTML 元素的引用,然后对这些元素进行操作以改变它们的属性、外观等。在标准的 JavaScript 语言中,可以通过 document.getElementById, document.getElementsByTagName, document.getElementsByClassName 等函数对 DOM...

weixin_39836898的博客 422

Dojo1.11官方教程文档翻译(6.4)实时Store

基于实时store的web应用所提供的时传统web应用不可能提供的,可以在数据变化时就让用户看到。Dojo对象存储接口作为Dojo应用的数据模型基础,它支持实时数据更新。在这篇教程中,我们将了解如何利用通知系统来和实时widget进行交互。

碎梦道 831

dojo是什么?

dojo: Dojo是一个用JavaScript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)),这也是为什么叫它a unifined toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到

dojo 2085

使用 dojo/query

在本篇文章中,我们将了解DOM的查询以及如何运用dojo/query这个模块来轻松地选择节点并操作他们。 入门指南 在操作DOM的过程中,如何快速高效地检索出DOM节点显得相当重要。我们在Dojo DOM Functions中已经熟悉了 dom.byId,然而,在应用程序里找出每一个感兴趣的节点的唯一ID是项繁琐且易错的工作。并且仅靠ID的方式来选择大量节点的效率可见是低下的。所以,...

weixin_30445169的博客 188
上一篇: Dojo Data Store —— 统一数据访问接口
下一篇: Dojo 1.6 最新官方教程: Dojo DOM 函数
dojotoolkit
博客等级 码龄16年 1205粉丝 61原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值