使用JS操作页面表格,元素的一些技巧

  (一)

  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;

  }