【发布时间】:2010-10-23 04:45:42
【问题描述】:
我有一个 AJAX 应用程序,它下载 JSON 对象并使用该数据使用 Javascript DOM 函数向 HTML
标签: javascript ajax internet-explorer cross-browser html-table
我有一个 AJAX 应用程序,它下载 JSON 对象并使用该数据使用 Javascript DOM 函数向 HTML
标签: javascript ajax internet-explorer cross-browser html-table
编辑:现在可以在 IE 中使用! insertSiblingNodesAfter 使用兄弟节点的 parentNode,恰好是 IE 中的一个 tbody
当您尝试操作 DOM 跨浏览器时,很难知道存在哪些怪癖。我建议您使用已在所有主要浏览器上进行全面测试的现有库,并考虑到怪癖。
我个人使用 MochiKit,你可以在这里深入了解 DOM 操作: http://mochikit.com/doc/html/MochiKit/DOM.html
您的最终函数可能如下所示:
function addEmployee(employeeName, employeeJob) {
var trs = getElementsByTagAndClassName("tr", null, "employeetable");
insertSiblingNodesAfter(trs[trs.length-1], TR({}, TD({}, employeeName), TD({}, employeeJob));
alert("code executed!");
}
【讨论】:
您需要创建一个 TBODY 元素来添加您的新 TR,然后将 TBODY 添加到您的表中,如下所示:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><title></title></head><body>
<table id="employeetable">
<tr>
<th>Name</th>
<th>Job</th>
</tr>
</table>
<script type="text/javascript">
function addEmployee(employeeName, employeeJob) {
var tableElement = document.getElementById("employeetable");
if (tableElement) {
var newTable = document.createElement('tbody'); // New
var newRow = document.createElement("tr");
var nameCell = document.createElement("td");
var jobCell = document.createElement("td");
nameCell.appendChild(document.createTextNode(employeeName));
jobCell.appendChild(document.createTextNode(employeeJob));
newRow.appendChild(nameCell);
newRow.appendChild(jobCell);
newTable.appendChild(newRow); // New
tableElement.appendChild(newTable); // New
alert("code executed!");
}
}
setTimeout("addEmployee(\"Bob Smith\", \"CEO\");", 1000);
setTimeout("addEmployee(\"John Franks\", \"Vice President\");", 2000);
setTimeout("addEmployee(\"Jane Doe\", \"Director of Marketing\");", 3000);
</script>
</body></html>
【讨论】:
tableElement.getElementsByType('tbody') 应该在这里返回所需的内容......
tableElement.getElementsByType('tbody') 应该在这里返回所需的内容
tableElement.getElementsByTagName('tbody')[0]
显然,在 IE 中,您需要将行附加到 TBody 元素,而不是 Table 元素... 请参阅Ruby-Forum 的讨论。
进一步展开讨论,