Chinaunix首页 | 论坛 | 博客
  • 博客访问: 516953
  • 博文数量: 91
  • 博客积分: 9223
  • 博客等级: 中将
  • 技术积分: 1777
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-02 17:37
个人简介

!!!!!!!!!!!!

文章分类

全部博文(91)

文章存档

2013年(3)

2012年(4)

2011年(37)

2010年(36)

2009年(9)

2008年(2)

分类: LINUX

2011-02-16 19:27:16

我就是想数一下这个table下有几个子nodes,就是body->table->tbody->然后是两个tr, 所以就应该是2啊,可是alert弹出来的是5,这么弄有什么不对吗





cell 1
cell 2



ie中,只出现2nodeName,都是TR,而在firefox中,出现5nodeName,分别是: #text
TR #text TR #text

检查后,我将代码中的回车删除,代码如下:


cell 1
cell 2

firefox中,可以看到有2TR

 

在结构上,第一个表单和第二个表单不同的是第一个表单的子节点间有回车或者空格,而第二个表单则是一行写到尾。大家都应该想到了吧,IE是将一个完整标签作为一个节点。而 Firefox除了上述的的情况外,也把一个标签的结束符“>”到下一个标签的起始符“<”之间的内容(除注释外,包括任何的文字、空格、回车、制表符)也算是一个节点了。而且这种节点也有它们自己独特的属性和值--nodeName="#text"

 

在实际运用中,Firefox在遍历子节点时,在for循环里不妨加上:
if(childNode.nodeName=="#text") continue;
这样,便跳过不需要的操作,使程序运行的更有效率。

 

 

使用下面函数可以在ie中实现节点交换,但在firefox是不行的。

function swapNode(node1,node2)
{

 var _parent1=node1.parentNode;
 var _parent2=node2.parentNode;

 var _t1=node1.nextSibling;
 var _t2=node2.nextSibling;

 if(_t1)
 {
   _parent1.insertBefore(node2,_t1);
 }
 else
  {
   _parent1.appendChild(node2);
  }

 if(_t2)
 {
   _parent2.insertBefore(node1,_t2);
  }
 else
  {
   _parent2.appendChild(node1);
  }
}

 

后来改为就可以了。

 function displayorHide(table, dis, leng)
 {
  var oTab = document.getElementById(table);
  var oTbody = oTab.tBodies[1];
  var oRows = oTbody.rows;
  var j = 0;
  var k = 0;
 var a = 0;
 var oTd;
 var arr = new Array();
 
 for(i=0; i {
  arr[i] = dis[i];
 }
 
 j =0;  
  for(i=0; i  {
   if (arr[i] == 0)
   {
    oTbody.rows[j].cells[k].style.display = "none";
    oTbody.rows[j].cells[k+1].style.display = "none";
   }
   else
   {
    for(a=0; a    {
     if (arr[a] == 0)
     {
      /*
      swapNode(oTbody.rows[j].cells[k],oTbody.rows[parseInt(a/2)].cells[(a%2)*2]);
      swapNode(oTbody.rows[j].cells[k+1],oTbody.rows[parseInt(a/2)].cells[(a%2)*2+1]);
      */
           
      newRow = oTbody.rows[j];
    
      oldRow = oTbody.rows[parseInt(a/2)];
   
      td1New = newRow.cells[k];//new
     
      td1Old = oldRow.cells[(a%2)*2];//old
    
      td2New = newRow.cells[k+1];//new
   
      td2Old = oldRow.cells[(a%2)*2+1];//old
      
      oldRow.insertBefore(newRow.cells[k], oldRow.cells[(a%2)*2]);
      newRow.insertBefore(oldRow.cells[(a%2)*2+1], newRow.cells[k]);
      oldRow.insertBefore(newRow.cells[k+1], oldRow.cells[(a%2)*2+1]);
      if (i==leng-1)
      {
       newRow.appendChild(oldRow.cells[(a%2)*2+1+1]);
      }
      else if(k+1 == 1)
      {
       newRow.insertBefore(oldRow.cells[(a%2)*2+1+1], newRow.cells[k+1]);
      }
     else
      {
       newRow.appendChild(oldRow.cells[(a%2)*2+1+1]);
      }
        
      arr[a] = 1;
      arr[i] = 0;
      break;
     }
    }  
   }
   k+=2;
   if (k == 4)
   {
    j++;
    k = 0;
   }
  }

  //去除不显示的行
  for (i=0; i  {
   if (0 == arr[i])
   {
    break;
   }
  }
  
  var m;
  var p;
  var n = i;
 m = arr.length - i;
   
  if (arr.length%2 == 0)
  {
   p = parseInt(arr.length/2);
   for (i=0; i   {
    oTbody.rows[p-i-1].style.display = "none";
   }
  }
else
 {
  if (m%2)
  {
   p = parseInt((arr.length+1)/2);
    for (i=0; i    {
     oTbody.rows[p-i-1].style.display = "none";
    }
  }
 else
  {
   p = parseInt((arr.length+1)/2);
    for (i=0; i    {
     oTbody.rows[p-i-1].style.display = "none";
    }
  }
 }
 
 if (n%2 != 0)
 {
  oTbody.rows[parseInt(n/2)].insertCell(2);
  oTbody.rows[parseInt(n/2)].insertCell(3);
 }
 
 //如果dis全为0,隐藏整个表单
 for(i=0; i {
  if (dis[i])
  {
   break;
  }
 }
 if (i==leng)
 {
  oTab.style.display = "none";
 }
 
 }

阅读(940) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2011-03-05 13:41:56

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com