使用 JavaScript 访问 DOM 树。JavaScript 的 DOM API 非常类似于 Java 的 org.w3c.dom 程序包。主要的区别在于对属性的访问。在 JavaScript 中可直接访问属性,而 Java 将属性视为私有,您需要通过 get 和 set 方法进行访问。例如,您可通过 dom.documentElement 获得文档的根元素。
DOM 是一种低级的 API,利用它可以访问已分析文档的结构。例如,在大多数情况下您都想忽略注释,并可能不愿意拥有相邻的文本节点。来看下面这个简单示例:
var xml = "< element>da< !--comment-->ta&"
+ "< ![CDATA[cdata< /element>";
您可以使用先前介绍的实用函数分析上述 XML 字符串:
var dom = parse(xml);
您可以在 ajaxUtil.js 中找到 parse() 函数的代码;本例中,该函数返回一个 DOM 树,其根元素包含一个文本节点,其后是一条注释、另一个文本节点和一个字符数据节点。如果希望包含的文本不带注释,则必须迭代元素的子元素,连接文本和字符数据节点的值(其类型分别为 3 和 4):
var element = dom.documentElement;
var childNodes = element.childNodes;
var text = "";
for (var i = 0; i < childNodes.length; i++)
if (childNodes[i].nodeValue) {
var type = childNodes[i].nodeType;
if (type == 3 || type == 4)
text += childNodes[i].nodeValue;
}
使用 DOM 时,应当构建一个小的实用函数集,以避免处理上述这些低级细节。
使用 JavaScript 生成动态内容。Web 浏览器使您可以通过文档对象访问 Web 页面的 DOM 结构。例如,您可以利用 document.getElementById(...) 非常轻松地找到一个元素。还可以创建可插入现有文档的新元素和文本节点。然而,如下所示,通过连接字符串构建 HTML 要更为简单:
function updateInfo(request) {
var shares = eval(request.responseText);
var table = "< table border=1 cellpadding=5>";
table += "< tr>";
table += "< th>Symbol< /th>";
table += "< th>Trend< /th>";
table += "< th>Last Price< /th>";
table += "< /tr>";
for (var i = 0; i < shares.length; i++) {
var share = shares[i];
var symbol = escapeXML(share.symbol)
var trend = share.trend > 0 ? "+" : "-";
var lastPrice = new Number(share.lastPrice).toFixed(2);
table += "< tr>";
table += "< td>" + symbol + "< /td>";
table += "< td>" + trend + "< /td>";
table += "< td>" + lastPrice + "< /td>";
table += "< /tr>";
}
table += "< /table>";
document.getElementById("table").innerHTML = table;
}
通过设置由 getElementById() 返回的对象的 innerHTML 属性,可将生成的 HTML 插入空
元素中,例如:
< div id="table">
< /div>
本文的示例将 updateInfo() 函数用作回调来处理对 Ajax 请求的响应,该请求是通过 ajaxLogic.js 文件中的 sendInfoRequest 发送到服务器的。如果希望每 5 秒更新一次信息,可使用 JavaScript 的 setInterval() 函数:
var symbols = [ ... ];
setInterval("sendInfoRequest(symbols, updateInfo)", 5000);
一个名为 DataFeed 的类模拟服务器端的馈送。ajaxCtrl.jsp 页面调用该馈送的 getData() 方法,将
