【译】用jQuery 处理XML-- DOM(文本对象模型)简介

 

用jQuery 处理XML--写在前面的话

用jQuery 处理XML-- DOM(文本对象模型)简介

用jQuery 处理XML--浏览器中的XML与JavaScript

用jQuery 处理XML-- jQuery与XML

 

原文:Processing XML with jQuery

来自IBM Developer Works

 

DOM(文本对象模型)简介

 

在正式开始介绍jQuery处理XML前我们来了解一些必备的基础知识。

 

DOM是HTML或者XML结构的一种展现形式,通过编程对DOM进行修改可以达到修改HTML/XML的目的。这部分使用一段简单的HTML文档并配合几个简单的例子来展示使用JavaScript对DOM上各节点的遍历和操作。

 

JavaScript中操作DOM

JavaScript中提供了一套完备的方法来获取,遍历,操作DOM。这里不详述,只是通过简单的例子来说明如何对操作。

后面的例子都基于以下HTML片段:

Listing 1. A simple HTML document


 

<!DOCTYPE html>

<html>

<head>

<title>This is the page Title</title>

</head>

<body class="signed-out">

<div id="header">

<ul id="nav">

<li><a href="/home" class="home">Home</a></li>

<li><a href="/about" class="about">About</a></li>

<li><a href="/auth" class="auth">Sign In</a></li>

</ul>

</div>

<div id="article">

<h1>A Plain DOM</h1>

<h2>An sample <b>HTML</b> document.</h2>

<div id="section"></div>

</div>

</body>

</html>

 

清单1中,id为header的Div中包含了一些导航链接,为了在JavaScript中取得这个id为header的Div,可以像清单2中的代码这样:

 

Listing 2. Getting a DOM element by id


 

<script type="text/javascript">

var article = document.getElementById("article");

</script>

 

 

 getElementById()是JavaScript中获取DOM元素最快的方法。元素的id属性可以让浏览器直接在众多DOM元素中找到它,因为id是唯一的。但由于当DOM中有重复的id时,浏览器并不会报错,并且微软的IE还把元素的name属性也当id来处理,所以在编写HTML代码时你要注意避免使用重复的id。

另一种获取DOM元素的方法为getElementsByTagName()。这个方法对于处理XML来说很重要,因为在XML中不那么容易会有id属性。清单3展示了getElementsByTagName()的使用,用它来获取H1节点。

Listing 3. Getting a set of elements by tag name


 

<script type="text/javascript">

var headers = document.getElementsByTagName("h1"); // returns array of H1 elements

alert(headers[0].innerHTML); // alerts inner html of the first H1 tag: "A Plain DOM"

</script>

 

这里注意两点有趣的地方。第一点是getElementsByTagName() 返回的是一个数组(包含所给元素名的所有元素组成的一个数组)。因为本例中只有一个H1元素,所以可以通过访问[0]下标来获取该元素。但这种方法是不保险的。因为页面中可能不存在H1元素,那么妳通过下标[0]就返回不到任何东西,然后浏览器可能会报错。 所以在使用获得的一个元素的属性(或方法时),最好先检查这个元素是否存在并且成功取到了。

第二,妳可能注意到了innerHTML 这个属性。顾名思义,通过它可以访问一个元素的内容,本例中则是H1中的文本。如果H1中还包含了其它元素的话,那么返回的这个文本中也包含这些元素。如清单4所展示的那样。

 

Listing 4. Using innerHTML to retrieve value with HTML elements


 

<script type="text/javascript">

var subheaders = document.getElementsByTagName("h2"); // returns array of H1 elements

alert(subheaders[0].innerHTML); // "An sample <b>HTML</b> document."

</script>

 

除了innerHTML外,浏览器还提供一个只返回元素的文本内容的方法。但这个方法在IE中叫做innerText 然而在其他浏览器中又叫做textContent 。所以为了写出跨浏览器通用的代码,妳可以需要像清单5这样操作。

Listing 5. Using innerText and textContent properties across different browsers


 

<script type="text/javascript">

var headers = document.getElementsByTagName("h1"); // returns array of H1 elements

var headerText = headers[0].textContent || headers[0].innerText;

</script>

 

这样,如果textContent 有返回值的话, headerText 变量就获取它,否则获取innerText 返回的值。一个更明智的做法是把这些有浏览器差异的地方都写一个方法来处理,jQuery已经包装了这些方法。

 

上文提供的HTML代码片段中包含了一个"Sign in"的连接,假设用户已经通过某种方式登陆了,我们想把这个"Sign in" 改掉显示成"Sign out"。在先前的例子中,通过使用innerHTML来得到元素的内容,现在也可以用它来设置元素的内容。清单6展示了这个特性。

 

Listing 6. Updating the innerHTML value of a DOM node


 

<script type="text/javascript">

var authElem = document.getElementById("auth"); // returns single element

authElem.innerHTML = "Sign Out"; // Updates element contents

</script>

 

除了更新已有的节点内容外,还可以创建全新的元素然后附加到已有的DOM元素上去(见清单7)。

 

Listing 7. Creating and injecting a new DOM node


 

<script type="text/javascript">

var ulElems = document.getElementsByTagName("ul"); // returns array of UL elements

var ul = ulElems[0]; // get the first element (in this case, the only one)

 

var li = document.createElement("li"); // create a new list item element

var text = document.createTextNode("List Item Text"); // create a text node

 

li.appendChild(text); // append text node to li node (still not added to DOM)

ul.appendChild(li); // append new list node to UL, which inserts it into DOM

</script>

 

正如上面代码所示,妳可以看到getElementById()和getElementsByTagName()经常是通过document来调用,这意味着方法是在document上面执行。妳当然也可以让方法在其他元素上执行,从而缩小找到目标需要的范围。这样的方法调用始终假设妳所想到获取的目标元素是妳所调用方法那个元素的子元素。记住这点因为在后面用jQuery处理XML时也是同样的道理。

从DOM移除元素也是小事一桩。首先是获取这个元素,然后通过它的父元素来调用移除方法。(见清单8)。(关于parentNode 及相关属性将在下面会介绍)

 

Listing 8. Removing an element from the DOM


 

<script type="text/javascript">

var firstList = document.getElementsByTagName("ul")[0];

firstList.parentNode.removeChild(firstList);

</script>

 

现在让我们来进行属性的设置及属性的移除。通过使用setAttribute() 和 getAttribute() 来实现(见清单9)。

Listing 9. Setting and removing an element attribute


 

<script type="text/javascript">

var firstUL = document.getElementsByTagName("ul")[0];

firstUL.setAttribute("class", "collapsed");

firstUL.getAttribute("class"); // returns "collapsed"

</script>

 

JavaScript 中遍历DOM元素

 

除了获取和处理DOM元素外,JavaScript学提供了一套完备的用来遍历DOM节点的方法。在之前的例子里妳已经看到过parentNode 这个方法的使用了。给定一个DOM元素后,妳就可以得到它周围的一些元素。

Listing 10. JavaScript's DOM traversal properties


 

firstChild //获取第一个子节点

lastChild //获取最后一个子节点

nextSibling //获取下一下兄妹节点

parentNode //获取父节点

previousSibling //获取前一个兄妹节点

 

更多关于节点属性的信息请移步这里

DOM节点间的这些相邻关系在HTML中就像清单11所展示的那个样子。

Listing 11. Relationship of related DOM elements


 

<parent_node>

<previous_sibling/>

<node>

<first_child/>

...

<last_child/>

</node>

<next_sibling/>

</parent_node>

 

最后我们来考虑一下展示了这些层级关系的树状图,见图1。一个给定的节点比如图中的"NODE",往上是父节点,处于同一层的包括了它的前一个和后一个兄妹节点。一个节点可以包含一个或多个子节点(其中就包括了第一个子节点firstChild 和最后一个子节点lastChild )。

 

Figure 1. Tree representation of adjacent nodes

 

当我产创建一个用来从给定起点遍历DOM元素的方法时,这些元素间的层级关系就变得非常有用(见清单12的例子)。在处理XML也会用到相似的方法。

Listing 12. JavaScript function for traversing the DOM


 

<script type="text/javascript">

function traverseDOM(node, fn){

fn(node); // execute passed function on current node

node = node.firstChild; // get node's child

while (node){ // if child exists

traverseDOM(node, fn); // recursively call the passed function on it

node = node.nextSibling; // set node to its next sibling

}

}

 

// example: adds "visited" attribute set to "true" to every node in DOM

traverseDOM(document, function(curNode){

if (curNode.nodeType==="3"){ // setAttribute() only exists on an ELEMENT_NODE

// add HTML5 friendly attribute (with data- prefix)

curNode.setAttribute("data-visited", "true");

}

});

</script>

 

到这里,妳应该已经熟悉HTML中遍历和处理各元素了。下一节当中将展示如何将同样的方法应用到XML的处理上。

时间: 2024-09-15 12:51:10

【译】用jQuery 处理XML-- DOM(文本对象模型)简介的相关文章

JQuery解析XML数据的几个简单实例_jquery

用JavaScript解析XML数据是常见的编程任务,JavaScript能做的,JQuery当然也能做.下面我们来总结几个使用JQuery解析XML的例子. 第一种方案: <script type="text/javascript"> $(document).ready(function() { $.ajax({ url: 'http://www.jb51.net/cgi/test.xml', dataType: 'xml', success: function(data

使用XML DOM生成XML(1)

dom|xml|生成xml  <--编者按:随着 XML 在网络开发中的应用的不断深入,该语言的复杂度在增加,你可以在本文对XML的新对象库XML DOM的介绍中体会到这一点-->      正如你所了解的,XML是个功能强大的新型数据结构,它可以让你把网页的内容和表现形式分开.尽管如此,目前,我们的文章大多仅介绍了直接生成XML标记得的法.我们在大多数时候,都是手工编写必需的标记和数据的.      幸运的是,微软提供了XML DOM(XML文档对象模型),这是另外一种编写XML代码的方法.

使用XML DOM生成XML(5)

dom|xml|生成xml 构造ASP网页         为了创建ASP网页,打开你所熟悉的HTML 编辑器,输入列表B中的代码.确保 Window.Navigate行指向合适的文件夹.要了解其是如何工作的,在Internet Explorer中打开该页.一旦打开后,就会出现一个信息,告诉你XML已经创建了成功,并出现一个 Show 按钮,点击该按钮,IE显示出图E中的XML文档.            图E:我们使用了几种不同的XML DOM 方法来创建完整的XML 文档      XML

java+jquery处理xml数据的方法_AJAX相关

本文实例讲述了java+jquery处理xml数据的方法.分享给大家供大家参考.具体实现方法如下: 1. AjaxJqueryXml.js如下: 复制代码 代码如下: function verify(){      //1.获取文本框中的内容      //jquery查找节点的方式,参数加#加上id属性可以找到一个节点      //jquery的方法返回的都是jquery的对象,可以继续在上面执行其他的jquery方法      var jqueryObj = $("#userName&qu

浅谈jQuery 选择器和dom操作_jquery

浅谈jQuery 选择器和dom操作 JQuery选择器 1.基本选择器 基本选择器是JQuery中最常用的选择器,也是最简单的选择器,它通过元素id.class 和标签名来查找DOM元素.这个非常重要,下面的内容都是以此为基础,逐级提高的. 1)."$("#id")",获取id指定的元素,id是全局唯一的,所以它只有一个成员. 2)."$(".class")",获取class指定的元素,不同的元素可以具有相同的class属性

【Ajax技术】JQuery处理XML数据

我们将之前写的应用使用jquery返回xml数据 程序清单 服务端Servelt:AjaxXMLServer.java 静态页面:ajaxJqueryXml.html javascript脚本文件:verifyjqueryxml.js AjaxXMLServer.java: import java.io.IOException; import java.io.PrintWriter; import java.net.URLDecoder; import javax.servlet.Servlet

jquery 解析xml字符串例子

XML和HTML都是标记语言,语法形式非常相似,同属于一个语言体系.对于HTML的解析,我是使用jQuery非常方便,其实,我们也可以用jquery解析XML,也是同样的方便. 如果你用过Java.PHP等语言解析过XML,相信会跟我有相同的感觉,那就是很麻烦.改用jQuery来读取.分析.操作XML后,给人意想不到的轻松感.下面我们来看看使用jQuery处理XML文件的几种形式方法. 使用JavaScript常规方法解析XML var xmlDoc = request.responseXML;

java+jquery处理xml数据的方法

本文实例讲述了java+jquery处理xml数据的方法.分享给大家供大家参考.具体实现方法如下: 1. AjaxJqueryXml.js如下: 复制代码 代码如下:function verify(){      //1.获取文本框中的内容      //jquery查找节点的方式,参数加#加上id属性可以找到一个节点      //jquery的方法返回的都是jquery的对象,可以继续在上面执行其他的jquery方法      var jqueryObj = $("#userName&quo

IE中的XML DOM

dom|xml 当微软在IE 5.0中第一次加入对XML支持时,他们只是在MSXML ActiveX库(最初是为了在IE 4.0中解析Active Channels的组件)中实现XML的功能.最初的版本并没有打算公开使用,然而随着开发人员逐渐了解这个组件并尝试使用时,微软才意识到这个库的重要性,很快就在IE 4.01中发布了MSXML完全升级版本.MSXML最初还只是IE的一个组件.直到2001年,微软发布了MSXML 3.0,这是一个通过其公司网站独立发布的产品.在2001年晚些时候,微软又发