本文翻译自:
Dojo DOM Functions
原作者: Sam Foster
翻译: Siqi (siqi.zhong@gmail.com)
在本教程中,您将学到如何使用Dojo简单地跨平台操作DOM。只需要基本DOM知识和几个Dojo函数,您就能高效地创建、读取、更新或是删除页面上的元素。
难度:初学者
Dojo 版本:1.6
开始上手
从基于浏览器的JavaScript受到关注时起,Document Object Model (DOM) 就是我们绘制所要内容的的地方,也是用户所看到的界面。如果我们想要增强、替换或是向浏览器加载好的HTML添加点什么东西,JavaScript和DOM便是我们所需要的。Dojo旨在使DOM操作变得更加简单、高效,为此Dojo提供了一些方便的函数来解决不同浏览器间恼人的的兼容性问题,并让常用操作更加简洁。
为了了解这些函数,我们将操作一个简单的页面,该页面中有一个含有五个元素的无序列表:
这个页面已经含有Dojo脚本标签, 相信你已经认识dojo.ready代码块。所有对DOM进行操作的代码必须等到DOM加载完毕后才能被执行。
检索
事有先后:为了对DOM进行操作,我们首先需要知道如何从DOM中获取元素。最简单的方法是使用dojo.byId。在你将一个你想要获得的元素的ID传给dojo.byId之后,如果ID相符的DOM节点存在,你将获得该节点,如果没有匹配的节点,那么将获得null。
这和使用document.getElementById是等价的,但是使用dojo.byId有两个优点:更简洁,并解决了某些浏览器对getElementById实现的bug。另一个dojo.byId很棒的特点是,如果你将一个DOM节点传给它,它将马上返回该节点。这有助于建立同时适用字符串与DOM节点的API。让我们来看一个例子:
查看示例
setText函数用来设置一个节点的文字内容,由于dojo.byId可以接受DOM节点作为参数,该函数也就可以接受字符串或者DOM节点。
创建
另一个你会经常做的事情就是创建元素。Dojo不会阻止你使用原生的document.createElement方法来创建元素,但是创建一个元素并为其设置所有需要的属性可能会是非常冗长的。更可怕的是,你将面对不少不同浏览器差异造成的额外属性设置。而这使得dojo.create不可谓是一个更方便、可靠的选择。
dojo.create有如下参数:节点名(字符串)、节点的属性(object)、可选的父节点或是兄弟节点、可选的与父节点或是兄弟节点的相对位置(默认为“last”)。它返回新建的DOM元素节点。让我们看一个例子:
查看示例
一个简单的内容为“Six”的列表元素被创建并被添加到列表中。接着,另一个内容为“Seven”的列表元素被创建,它的className属性为”seven”,该样式使其字体为粗体,然后该元素被添加到列表中。最后,一个内容为“Three and a half”的列表元素被创建并被插入到ID为“three”的列表元素之后。
什么时候该像这样创建元素,什么时候该直接设置一个容器的innerHTML属性呢?如果你已经有一个你所需要的HTML内容的字符串时,设置innerHTML属性肯定会更快一点。但是,dojo.create的优势在你想要创建节点但又不需要立即将他们添加到DOM中,或是当你想要插入或是添加一个新元素而不影响周围的兄弟节点时就体现出来了。
安插
如果你已经有了一个节点并且想将安插到某处,你将会需要用到dojo.place。其参数如下:DOM节点或一个想要安插的节点的ID、DOM节点或是一个参照节点的ID、可选的位置(字符串,默认为“last”)。这和我们看到的dojo.create的参数表很像,事实上,dojo.create在底层使用了dojo.place。在前面的例子基础上,我们向页面加了几个按钮:
下面代码定义了一些使用dojo.place来移动列表中第三个节点的函数:
查看示例
安插位置的有效参数可以是"before"、"after"、"replace"、"only"、"first"或"last"。有关每种安插选项的含义请参见reference guide for dojo.place 。
在这个简单的例子里,dojo.place比原生的parentNode.appendChild(node)稍稍多做了一点事情。它可以简单地指定安插的位置,无论是相对于父节点或是兄弟节点——使用一个一致的API。
删除
通常你会创建节点,不过有时候,你也会想要删除某些节点。Dojo提供了两种方法来删除节点:dojo.destory会删除一个节点和其所有的子节点,而dojo.empty将只删除一个节点的子节点。这两种方法都接受一个DOM节点或是一个节点的ID作为参数。我们将向我们的页面添加两个按钮:
查看示例
第一个按钮在用户按下时删除列表中的第一个元素。第二个按钮则清空整个列表。
总结
现在,我们有了一套比较全面的用来操作DOM的工具,从创建节点到移动节点再到删除它们——但它们在同一个时刻都只能对一个节点进行操作。如果你想要对一些没有ID的节点进行操作怎么办?下一个教程将会介绍dojo.query,它可以让我们基于CSS选择器来查找、操作节点!
分享到:
相关推荐
以下是对Dojo 1.6 DOM相关操作的详细说明: 1. **dojo.query**: 这是Dojo提供的一个强大选择器,类似于jQuery的`$`函数。它可以解析CSS选择器,并返回一个NodeList,这个NodeList可以进行链式操作。例如,`dojo....
2. **Dojo Toolkit Core**:这是Dojo的基础部分,包含了大量的实用函数和类,用于DOM操作、事件处理、Ajax请求、动画效果等。1.6版对这些核心功能进行了优化,提高了性能和兼容性。 3. **AMD(Asynchronous Module ...
2. **加载Dojo模块**:在回调函数中,使用`require`方法来加载Dojo模块。 ```javascript callback: function(ready) { require(['dojo/dom', 'dojo/on'], function(dom, on) { var button = dom.byId('myButton');...
3. **dojo/ready**:这个模块用于确保DOM加载完成后再执行指定的函数,它是Dojo中的一个实用工具,常用于页面初始化。 4. **dojo/store**:这是一个数据存储抽象层,提供了一种统一的方式来访问和操作数据,无论...
这个"dojo 官方教程 中文翻译"是针对Dojo框架的全面指南,帮助中文用户更好地理解和应用Dojo。 在Dojo官方教程中,你可以学习到以下核心知识点: 1. **Dojo基础**:了解Dojo的核心概念,如dojo/_base模块,这是...
这个"Dojo官方教程中文翻译完美版"为开发者提供了全面了解和掌握Dojo工具集的宝贵资源。 在Dojo框架中,有几个核心概念和关键组件是学习的重点: 1. **模块系统(AMD,Asynchronous Module Definition)**:Dojo是...
20. **dojo.xml、dojo.dom**:DOM操作和XML辅助函数,帮助处理XML文档和DOM树。 21. **dojo.style**:CSS相关的功能,如获取和设置元素样式,与浏览器的盒模型兼容。 在实际使用中,如需使用日期控件,首先需要...
1. **dojo/_base**: 这是Dojo的基础模块,包含了Dojo的核心功能,如事件处理、对象创建、函数绑定等基础工具。 2. **dojo/dom**: 提供了与HTML文档对象模型(DOM)交互的功能,如查找、操作和样式控制。 3. **dojo...
5. **dojo/ready** 和 **dojo/domReady**:这两个模块用于确保DOM加载完成后再执行代码,`dojo/ready`是`dojo/domReady`的超集,也等待模块加载。 6. **dojo/store** 和 **dojo/data**:这两个模块是Dojo的数据层,...
"去掉了dojo的util文件夹"意味着该压缩包不包含util模块,这通常用于提供一些通用的工具函数,但删除它不影响基本功能的运行,因为Dojo的核心功能仍然存在。 Dojo 1.8.3 的主要知识点包括: 1. **dojo/_base**: 这...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括AJAX、DOM操作、动画效果、事件处理、模块化等。在"dojo测试例子"中,我们很可能会涉及到以下Dojo的核心概念和技术: 1. **dojo加载器...
3. **dojo/ready**: 用于在DOM准备就绪或页面完全加载后执行指定的函数,是Dojo中的一个重要概念,确保在执行代码时,DOM已经完全构建完毕。 4. **dojo/store**: 提供了一种数据存储抽象,允许与不同类型的后台数据...
- **dojo.math**:数学计算相关的函数。 - **dojo.reflect**:提供反射机制的支持。 - **dojo.rpc**:实现JSON-RPC和其他远程调用协议。 - **dojo.storage**:本地存储解决方案,如Flash Local Shared Objects或...
Dojo 是一个强大的JavaScript工具包,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作到数据管理,从动画效果到AJAX通信等各个方面。...当然,如果有条件,访问官方网站获取最新的文档和更新仍然是最佳选择。
这个"最新dojo包"中的实例文件可以帮助初学者快速理解和上手Dojo框架,通过实际操作掌握如何使用这些功能和组件。无论是对于前端开发新手还是有经验的开发者,Dojo 1.7都是一个值得深入研究的工具集。通过实践这些...
1. 官方文档:详尽的API参考和教程,是学习DOJO的第一手资料。 2. 示例代码:通过实践例子加深理解,可以到DOJO的官方示例库查找。 3. 社区论坛:与其他开发者交流问题和经验,解决实际开发中遇到的难题。 总的来说...
7. **dojo/ready**: 在DOM加载完成后执行指定函数,类似于jQuery的$(document).ready(),确保代码在页面完全加载后执行。 8. **dojo/Stateful**: 是一个基类,用于实现具有状态的对象,常见于Dojo的组件中,如dijit...
2. **dojo.place**:用于在DOM树中插入、替换或移除元素,是Dojo提供的强大DOM操作工具之一。 四、Dojo数据与Ajax 1. **dojo.data**:Dojo的数据接口提供了一种抽象的方式来访问和操作各种数据源,包括XML、JSON等...
Dojo学习笔记-- dojo.dom Dojo学习笔记-- dojo.event & dojo.event.topic & dojo.event.browser Dojo学习笔记--DateTextbox Dojo学习笔记--Dojo的基础对象和方法 Dojo学习笔记--FisheyeList鱼眼效果 Dojo学习...
7. **dojo/ready**: 这是一个非常实用的函数,用于确保在DOM准备就绪或者页面完全加载后执行代码,避免了传统的window.onload或DOMContentLoaded事件的使用。 8. **dojo/store**: Dojo的存储模块为数据管理提供了...