td中的rowspan属性在Firefox和IE浏览器下的不同

添加评论 2010年4月3日

1、是否存在的判断

IE浏览器下,不管有没有设置rowspan这个属性,IE均认为有此属性,且默认值为1。而在Firefox浏览器中,则根据DOM中的设置进行判断,DOM中没有写rowspan,则不认为td具备此属性。

    因此用JQUERY判断某行的具有多行特性的TD用下面这种方法是不行的。
    $("table tr:eq(0) td[rowspan]").length 
    这个写法,在IE下为所有的TD数量,但是在Firefox下得到的是DOM中写了ROWSPAN值的TD数量
    可以这样写:
        $("table tr:eq(0) td").filter(function(){
               return $(this).attr("rowspan")>1
        }).length
   IE,Firefox,得到的均为7
  
2、删除某行后,ROWSPAN的变化

    IE在删除一行后,会自动把对应的rowspan的值减1。而Firefox浏览器不减,它的值严格按照最初写的DOM中的ROWSPAN,需要您亲自写代码把rowspan的值减掉1

Js代码:

<script language="javascript">
    $(document).ready(function(){
        alert($("table tr:eq(0) td[rowspan]").length);
        alert($("table tr:eq(0) td:not([rowspan])").length);
        alert($("table tr:eq(0) td").filter(function(){
               return $(this).attr("rowspan")>1
        }).length);
           
        $("input").click(function(){
            $("table tr:eq(1)").remove();
            alert($("table tr:eq(0) td:eq(0)").attr("rowspan"));
        });  
    });
</script>

Html代码:

<body> 
<table >                  
    <tr><td rowspan=4>参数名称1<br/><a>新增</a><a>删行</a></td><td rowspan=4>字段名</td><td rowspan=4>编号</td><td rowspan=4>本参数值用于进行用户的设置</td><td>参数值1</td><td>参数值名1</td><td><a>修改</a><a>删除</a></td></tr> 
    <tr><td>参数值2</td><td>参数值名1</td><td><a>修改</a><a>删除</a></td></tr> 
    <tr><td>参数值3</td><td>参数值名1</td><td><a>修改</a><a>删除</a></td></tr> 
    <tr><td>参数值4</td><td>参数值名1</td><td ><a>修改</a><a>删除</a></td></tr> 
</table> 
<input type="button" value="click me"> 
</body> 

除了上面的问题还碰到了一个js问题,跟下面网友列出问题是一样,我们先看看网友提供的效果图,然后再来说说这个问题。

要实现的效果如下:

 

     为了实现这个表单效果,需要把前两个的td中rowspan设置为3,才能达到效果。在做的时候,是先用freemarker判断从j2ee中返回的list类型数据是不是有一样的,如果有一样的,则合并掉。在实现这个功能要用到js,就在freemarker中写了如下代码

       var addRow=document.getElementById("org${idx2}").getAttribute("rowspan");
       document.getElementById("org${idx2}").setAttribute("rowspan",parseInt(addRow)+1);
       document.getElementById("num${idx2}").setAttribute("rowspan",parseInt(addRow)+1);

       结果在IE8,Firefox下都没问题,谁知道这用了ie8的兼容模式一下,ie6下出错了。有一个浏览器不能正常显示,这当然不能过关了,后来通过搜索发现原来在IE6下的rowspan要改成rowSpan,IE6还分大小写。

      到此,算是解决rowspan属性的问题了。

  1. 还没有评论.想坐沙发?
  1. 还没有 trackbacks
订阅评论