(一)
ie 、firefox以及其它浏覽器對於 table 標簽的操作都各不相同,在ie中不允許對table和tr的innerHTML賦值,使用js增加一個tr時,使用appendChile方法也不管用。下面是我就三種浏覽器測試的結果:
insertRow
IE6 :支持,而且默認參數為-1,默認添加到最後
FireFox :支持,但部支持默認參數
Opera :支持,支持默認參數,默認添加到最前
AppendChild
IE6 :不支持
FireFox :支持,但增加TR後不影響ROWS
Opera :支持,效果同insertRow(-1),影響ROWS
最大限度的遵循規范,就能寫出安全的、適用性強的代碼了:
//向table追加一個空行:
var otr = otable.insertRow(-1);
var otd = document.createElement("td");
otd.innerHTML = " ";
otd.className = "XXXX";
otr.appendChild(otd);
這樣就可以運行在這三種浏覽器上了
(三)childNodes的操作
(1)屬性nodeName
Utils.getChildrenByTagName = function (node, tagName) {
var ln = node.childNodes.length;
var arr = [];
for (var z = 0; z < ln; z++) {
if (node.childNodes[z].nodeName == tagName) {
arr.push(node.childNodes[z]);
}
}
return arr;
};
(2)屬性id
function getNodeID(parent, id) {
var ln = parent.childNodes.length;
for (var z = 0; z < ln; z++) {
if (parent.childNodes[z].id == id) {
return parent.childNodes[z];
}
}
return null;
}
(3)屬性className
對應class,如 <tr class="class1">
function getElementsByClassName(node, className) {
var children = node.getElementsByTagName("*");
var elements = new Array();
for (var i = 0; i < children.length; i++) {
var child = children[i];
var classNames = child.className.split(" ");
for (var j = 0; j < classNames.length; j++) {
if (classNames[j] == className) {
elements.push(child);
break;
}
}
}
return elements;
}