每个Ajax 框架都对Javascript 做了扩展,提供了很多常用函数,增强了 Javascript 的开发效率。在这里将对部分Dojo 中的常用函数做简单的介绍。由于Dojo的常用函数较多,也为方便大家阅读,将这些常用函数分为了五个类别分别进行介绍。本文将介绍第三部分的内容:页面生命周期及DOM相关常用函数。
* 本系列博文的绝大多数内容来自于对dojocampus.org上的dojo reference guide文档的翻译,在此也特别感谢文档的翻译者们:Fei Jia, Zhu Xiao Wen, Li Wen Bing, Zhang Jun, Hu Kuang, Huang Wei, Wu Min Qi, Mo Ying, Cheng Fu, Zhong Si Qi
dojo.addOnLoad
如果想用好dojo,必须熟悉Dojo.addOnLoad,它提供了一种机制使作为参数传入该函数的语句及其他函数可以在整个页面的DOM加载完成之后运行。常见的一种情况是:
这段JS代码会无法正确运行,因为在js运行时,”other”还未被定义。当然,你可以把这段JS代码放在页面最后,但这样做并不符合正常的HTML编写方式,而且在另一些情况下,也会对你的代码造成部分影响。
对于这类情况,你就可以使用dojo.addOnLoad(...):
或者:
dojo.addOnUnload
与dojo.addOnLoad(...)相呼应,Dojo.addOnUnload用于注册函数在页面销毁时运行。
dojo.query
在进行DOM相关操作时,很多时候需要查找特定的DOM节点,使用浏览器原生的DOM API进行查找不仅需要写较多的代码,而且很多时候效率十分低下,dojo.query则提供了一个更快、更方便的方式来对DOM节点进行查询。
Dojo.query接收两个参数,第一个为一个字符串,是通过一些基于CSS3标准的属性查询模板,第二个参数为可选参数,为一个DOM节点对象或节点ID,为查询设定范围。
由于dojo.query采用的是CSS3标准查询模板,当你想用dojo.query进行DOM查询时,你可以在任何的CSS文档中找到正确的查询条件模板,下面的示例是一些简单的查询调用:
dojo.byId,dojo.doc, dojo.body
dojo.byId用途与document.getElementById一致:根据DOM节点的ID返回DOM节点对象,但简短了许多,在所有的浏览器下都是有效的。
dojo.doc相当于windows[“document”]的值,该函数的作用主要有两个。首先它提供了一个指向当前文档对象的更为简洁的引用。其次,所有使用 dojo.doc 的引用,只需要通过改变dojo.doc变量的值,就可以临时切换到其它的文档对象作用域上。使用这个变量来替代对 window.document 的使用。通过这种方式可以确保是在当前页面的文档对象上工作。另外,通过使用此变量,当文档对象发生改变的时候,与文档对象相关的操作还能正确执行。这点对于需要在iframe中运行的Dijit组件来说尤为重要。
dojo.body用于返回当前文档的body对象。
dojo.create,dojo.place
dojo.create()可以简化在维护DOM时经常需要频繁执行的一系列操作步骤,例如: 新建DOM节点/给已存在的节点赋予新的属性 –> 为其设置属性 -> 将其置于DOM树上。
该函数接受四个参数: dojo.create(tag, attrs, refNode, pos);
tag可以是字符串或DOM节点。如果是字符串,函数会将其视作节点的标签名,以此来新建节点。建立节点时,会以refNode作为父节点。如果refNode为null或并未指定,则默认以dojo.doc作为父节点。
attrs是一个JavaScript对象,其中包含了用以赋予节点的一组属性信息。该参数会在节点创建成功后被原封不动的传给dojo.attr。attrs参数可以null,也可以不指定,亦即“不设置任何属性”,但是假如你想指定函数余下的传入参数,则应该为其显示的指定null值。
refNode,如之前提到的,作为创建节点的父节点对象,该参数为DOM节点对象或节点的ID。此参数可以省略,即表示“不立即安置该节点”。
pos为可选参数。取值可以是数字,或如下字符串之一:"before", "after", "replace", "only", "first", 或"last"。如果省略,则默认取"last"。表示安置创建的节点到给定的位置上。
若第一个参数传入的是``tag``字符串,则函数成功执行后会返回以该字符串命名的DOM节点,若传入的是DOM节点,则直接将其作为结果返回。例如, 新建一个带href属性的超链接标记,将其置于<body>下:
dojo.place函数用于放置给定的DOM节点到指定的位置上。在某些场合下,根据HTML片段来创建和安置节点也许会更容易一些,我们无需为节点设置任何属性,或是将其指定为某个HTML片段的一部分,则可以考虑使用dojo.place:
dojo.destroy
dojo.destroy用于将当前节点从其父节点中删除,并逐一销毁自身及其所属的全部子节点。该函数仅对DOM节点有效,并且没有返回值。
dojo.attr, dojo.hasAttr, dojo.removeAttr
Dojo.attr提供了获取或修改(增加)DOM节点属性的、事件、CSS样式的方法,它既可作为getter也可作为setter。Dojo.attr包括三个参数:
node:要进行操作的 DOM节点对象或其ID
attr:要进行操作的DOM节点属性名,或一个包含键值对的JSON对象,用于为DOM节点设置其中包括的所有属性
value,为可选参数,如果attr参数为某一属性名,且传入value参数,则为该节点设置相应属性,如果未传入value参数,则返回该节点的attr属性值,如果该节点没有该属性,则返回false。
dojo.hasAttr用于检查给定的DOM节点是否有给定的属性值,如果有则返回true,否则返回false:
dojo.removeAttr用于移除给定节点给定节点的给定属性:
dojo.position,dojo.marginBox, dojo.contentBox
Dojo.position用于获取给定DOM节点的绝对位置及大小信息(包括边界 - border)。返回值为一个JSON对象:{ w: 300: h: 150, x: 700, y: 900, },分别表示w:宽度,h:高度,x:X坐标值,y:Y坐标值,单位都为px。
该函数接受两个参数:
node: 要获取信息的 DOM节点对象或其ID
includeScroll:该参数为一个boolean值,默认为false,当设为true时,返回的x及y则为相对于整个document文档的位置值(忽略滚动条)。
dojo.marginBox和dojo.contentBox都可以用于获取和设置给定节点的大小,第一个参数为给定的DOM节点,第二个参数为可选参数,是一个类似于{ l: 50, t: 200, w: 300: h: 150 }的JSON对象,如果传入第二个参数,则将给定节点设置新的位置、大小。区别在于marginBox包括了节点的margin大小,它们的返回值都为一个对象:{ l: 50, t: 200, w: 300: h: 150 }。
Dojo.style
用于获取或设定DOM节点的样式。该函数接收3个参数:
node:要进行操作的 DOM节点对象或其ID
style:要进行操作的DOM节点样式属性名,或一个包含键值对的JSON对象,用于为DOM节点设置其中包括的所有样式
value:为可选参数,如果style参数为某一样式属性名,且传入value参数,则为该节点设置相应样式,如果未传入value参数,则返回该节点的style样式值。
dojo.hasClass, dojo.addClass, dojo.toggleClass
dojo.hasClass用于判断给定的DOM节点是否有指定的CSS class
dojo.addClass用于为给定的DOM节点增加指定的CSS class
以上两个函数都接受2个参数:
要进行操作的 DOM节点对象或其ID;一个CSS class名称字符串:
dojo.toggleClass用于为给定的DOM节点添加或删除指定的CSS class。此函数接受3个参数:
node: 要进行操作的 DOM节点对象或其ID
class: 一个CSS class名称字符串。
condition:可选参数,为boolean值。如果给定该参数,当该 参数为TRUE时,操作为添加class,为false时操作为删除class。如果该参数未被指定,如果给定的DOM节点没有给定的class则为其添加,否则删除给定的class。
以上就是部分Dojo的页面生命周期及DOM相关常用函数,在下一部分中,会介绍关于Dojo对于String及Array对象的一些扩展函数。
分享到:
相关推荐
DojoWidgetOverview.pdf 文件可能详细阐述了Dojo部件体系结构,包括部件的生命周期、属性和方法,以及如何自定义和扩展部件。这对于深入理解和使用Dojo的部件系统至关重要。 总之,Dojo是一个强大且全面的...
测试时,会关注部件的生命周期方法和事件处理。 11. **dojo/on**:事件监听模块,提供了统一的事件处理接口。测试时,会通过触发事件来检验代码响应的正确性。 12. **dojo/has**:特性检测模块,用于判断浏览器或...
8. **dojo/Deferred**:在异步编程中,`dojo/Deferred`是处理回调和承诺的重要工具,它可以管理异步操作的生命周期,使得多步骤的异步操作更加清晰。 9. **dijit/form**:Dijit是Dojo的UI组件库,其中`dijit/form`...
3. **buildRendering()** 和 **postCreate()**: 这两个方法在Widget生命周期中起到关键作用。`buildRendering()` 是初始化渲染阶段,用于设置DOM元素和初始样式。`postCreate()` 则在渲染完成后调用,用于进一步的...
它的核心理念是将UI视为由可重用的组件构成,每个组件都有自己的状态和生命周期方法。React使用JSX语法,这是一种JavaScript的扩展,允许我们在JavaScript代码中混合HTML,使得编写UI更加直观。 在这个"dojo-react...
每个Dojo控件都是一个JavaScript类,通常继承自_Widget或其子类,这些类提供了控件的生命周期管理函数,如构造函数、postCreate等,允许开发者在特定阶段插入自定义逻辑。 以_Dojo基类为例,`preamble`和`...
- 集成到JSF:将自定义的Dojo Ajax请求与JSF的生命周期同步,确保在适当的时候触发请求和处理响应。 7. **优化与性能**:自定义Ajax更新方式时,应考虑性能优化,如减少不必要的网络请求,合理缓存数据,以及优化...
- DOM操作:源码中会包含大量DOM元素的选择、添加、删除和修改的示例,帮助理解如何动态更新页面内容。 - 事件处理:Ajax交互往往涉及用户触发的事件,如按钮点击。源码将展示如何绑定和处理各种事件。 - 函数...
函数组件更简洁,而类组件则可以使用生命周期方法和this关键字。 **React状态和属性** - **状态(State)**:在React组件中,状态是组件可以改变的数据。当状态改变时,组件会自动重新渲染,显示更新后的视图。...
- **页面生命周期**: 显示页面加载过程中的各个阶段,以及每个阶段的具体耗时。 #### 五、案例分析 以追踪Google网站为例,我们可以发现以下关键信息: - **Page Load Time**: maps.google.com的页面加载时间为...
2. **JavaScript和DOM**:掌握JavaScript语言基础,特别是与DOM(Document Object Model)交互的部分,因为AJAX的主要任务之一是动态更新DOM以改变页面内容。 3. **HTTP协议**:了解HTTP请求和响应的生命周期,这...
学习如何创建、配置和使用XMLHttpRequest对象,以及如何处理请求的生命周期,包括发送请求、接收响应和处理数据。 3. **JSON和XML**:在Ajax中,数据通常以JSON(JavaScript Object Notation)或XML格式传输。理解...
1. **学习React基础知识**:掌握如何创建组件,理解props(属性)和state(状态),以及生命周期方法。 2. **实践JSX语法**:学习如何在JSX中嵌入表达式,创建条件渲染和循环。 3. **理解React Hooks**:React 16.8...
3. **异步通信的生命周期**:从创建XMLHttpRequest对象到处理服务器响应的完整流程。 4. **安全和性能考虑**:如何处理跨域请求,优化Ajax请求以提高性能。 5. **最佳实践**:设计良好的Ajax接口,错误处理和用户...
- **React集成**:虽然React提倡使用原生JS和生命周期方法,但在实际项目中,jQuery常用于辅助开发,特别是在处理DOM操作和动画时。 - **Express和Node.js交互**:jQuery的Ajax功能可以方便地与后端Express接口...
6. **Servlet/Webservices**:这门课程深入讲解Servlet的工作原理、部署和生命周期管理,以及Filter和Listener的使用。此外,还会涉及Web服务的开发,包括基于Java-WS API的POJO Web服务。学员将熟练掌握Servlet开发...
- **Request**: 跨越整个请求生命周期,包括转发。 - **Session**: 在整个会话期间有效,直到会话结束或显式销毁。 - **Application**: 在整个Web应用中有效,直到Web应用停止。 7. **Ajax的工作原理** - Ajax...
总结来说,避免JavaScript内存泄漏并不复杂,关键在于理解JavaScript的内存管理机制和DOM生命周期。遵循上述三个步骤,尤其是合理处理事件监听器和XMLHttpRequest对象,以及谨慎使用DOM扩展属性,能有效防止内存泄漏...
学习Ajax首先要理解这个对象的生命周期,包括打开连接、发送请求、接收响应等步骤。 2. **JavaScript与DOM**:Ajax与JavaScript紧密相连,JavaScript是实现Ajax动态更新页面的关键。同时,DOM(Document Object ...
- **18.2 指令的执行过程**:AngularJS指令的执行顺序和生命周期是明确的,有助于开发者理解和调试。 - **18.3 基本的自定义方法**:定义自定义指令的方法包括`link`函数、`controller`等。 - **18.4 属性值类型的...