zoukankan      html  css  js  c++  java
  • js实现表格中不同单元格内容的替换(不同浏览器的节点属性兼容问题)

       ------->  

    效果:点击右下角单元格,左下角单元格内容被替换成和左上角相同,如上图所示。

    实现方式:分别获取各个节点,并将左边节点的内容修改成左上方节点的内容。

    代码:

    注意的地方:

    如果html部分写成如下格式,则无法得到目标的效果。

    为了说明这个问题的原因,可以通过获取第一个tr的第一个子节点的类型来说明。

    获取第一个tr的第一个子节点类型:

    var n = document.getElementsByTagName('tr')[0].firstChild.nodeName;
    
    alert(n);

    可以看出,第一个tr的第一个子节点类型是文本类型。

    修改html代码结构如下(tr和td标签之间留出若干空格)。

    测试此处tr的第一个子节点类型结果如下:

    依然是文本类型。

    去掉tr和td之间的空格再测试则得到如下结果:

    由上面的分析可以得出结论,浏览器对标签之间的空格(空白节点)是敏感的。

    节点之间的空白符,在firefox、chrome、opera、safari浏览器是文本节点,而在IE(IE<9)版本中是忽略空白节点的。

    为了做到各个浏览器的兼容,有以下两中方法:

    第一种方法是改变源码的书写格式

    <div id="div" ><divid="div01">这是div01</div ><divid="div02">这是div02</div ></div>

    经测试,所有alert的值都是2。但是这种写法看起来很别扭,并且写起来也很麻烦。要是很多很多的代码标签也不易于维护。

    第二种方法是在调用childNodes属性之前先将空格删除。下面是一个删除空格的方法:

    //如果是文本节点,并且值为空,则删除该节点。
    for(vari = 0; i < node.length; i++) {   
    if(node[i].nodeType == 3 && /s/.test(node[i].nodeValue)){   
         node[i].parentNode.removeChild(node[i]);             
      }}
    alert(node.length);

    这样也能达到同样的效果,而且html代码格式也不需要改变。

    参考:不同浏览器中childNodes获取子节点个数 http://group.zcool.com.cn/post/ZOTE5NjQ0.html

  • 相关阅读:
    前端开发者也可以酷酷地开发桌面程序
    手把手教你怎么搭建angular+gulp的项目(一)
    在Angular中,如果权限值是异步请求所得,如何将其设置为HTTP请求头的Authorization?
    AngularJs ng-repeat指令中怎么实现含有自定义指令的动态html
    第一篇随笔,练练手
    我参与 Seata 开源项目的一些感悟
    一次 kafka 消息堆积问题排查
    图解 Kafka 水印备份机制
    Seata 动态配置订阅与降级实现原理
    记一次 Kafka 集群线上扩容
  • 原文地址:https://www.cnblogs.com/wx1993/p/4670608.html
Copyright © 2011-2022 走看看