在firefox中,使用window.getSelection()对象取得选中的table中的多个单元格
   发现rangecount值总为1 ,如何使得rangecount的值为选中的单元格数量呢?
   有什么方法没,请指教,多谢
   

解决方案 »

  1.   

    var rng = window.getSelection();
    var count = 0;
    for(var i=0;i<rng.length;i++)
    {
    var a=rng.item(i);
    if(a.tagName=="td")count++;
    }
    alert(count);
      

  2.   

    楼上的同学 我在firefox下试过了 根本就不行啊
      

  3.   

    额 要补充点是 我是在iframe里面操作表格
      

  4.   

      恩 清楚地描叙下我的情况(环境:firefox3)
    1.我在iframe里面生成了table
    2.我在iframe里面选择了table中的多个cell,(这几个cell边框区域变黑显示被选中)
    3.myframewindow.getSelection().toString(),结果只显示选中的第一个cell文本内容,其他cell的内容不显示
    4.what happen?
      

  5.   

    <script>
    function abc(){
    var rng = window.getSelection().getRangeAt(0);
    if(!rng.commonAncestorContainer.getElementsByTagName){
    if(rng.commonAncestorContainer.parentNode.nodeName=="TD"){
    alert(1);
    }
    return;
    }
    var children = rng.commonAncestorContainer.getElementsByTagName("td");
    var count = 1;
    for(var i=0; i<children.length;i++){
    var temp = children[i];
    if(temp.nodeName=="TD"){
    if(rng.isPointInRange(temp,1)){
    count++;
    }
    }
    }
    alert(count);
    }
    </script>
    <body onmouseup="abc()">
    <table id="mytable" width="800" border="1"> 
    <tr> 
    <th colspan="7"> 
    <span class="title">工号管理 </span> 
    <div style="float:right"> <input type="button" value="添加工号" onclick="location.href='../adminFunction/addNumber.html'"/> </div> 
    </th> 
    </tr> 
    <tr> 
    <td colspan="7" class="select"> 
    选择客服: 
    <select name="server"> 
    <option value="" selected="selected">全部客服 </option> 
    <option value="" onclick="display1()">未分组 </option> 
                        <option value="" onclick="display2()">技术部 </option> 
                        <option value="" onclick="display3()">商业部 </option> 
    </select> 
    </td> 
    </tr> 
    <tr class="row1"> 
    <td width="70">工号 </td> 
    <td width="70">姓名 </td> 
    <td width="70">部门 </td> 
    <td width="70">身份 </td> 
    <td>权限 </td> 
    <td width="50">操作 </td> 
    </tr> 
    <tr class="row2"> 
    <td>vicente </td> 
    <td>arashi </td> 
    <td>未分组 </td> 
    <td>管理员 </td> 
    <td>客服管理  | 聊天记录管理  | 删除记录 |  基本设置  | 数据分析 | 风格设置 </td> 
    <td>- </td> 
    </tr> 
            <tr class="row2"> 
    <td>mischiru </td> 
    <td>AAA </td> 
    <td>技术部 </td> 
    <td>管理员 </td> 
    <td>客服管理  | 聊天记录管理  | 删除记录 |  基本设置  | 数据分析 | 风格设置 </td> 
    <td>- </td> 
    </tr> 
            <tr class="row2"> 
    <td>GReeeeN </td> 
    <td>ayumi </td> 
    <td>商业部 </td> 
    <td>客服 </td> 
    <td>聊天记录管理  | 删除记录 |  基本设置  | 风格设置 </td> 
    <td>- </td> 
    </tr> 
    </table> 
    </body>
      

  6.   

    非常多谢楼上同志的代码,但是我的问题是:
    在一个iframe中,有一个table,我通过鼠标选取了table中的多个单元格:
    代码如下:<script>
        var wid = document.getElementById("iframe_id").contentWindow;
        var sel = wid.getSelection();
        alert(sel.toString());
    </script>
    结果总是选取的第一个单元格内容,其他单元格内容取不到
    这个问题让我抓狂了
    ps:在非iframe页面中是正常地  
      

  7.   

    不会啊.选多少就显示多少啊.
    <iframe id="iframe_id" src="test.html"></iframe>
    <button onclick="abc()">a</button>
    <script>
    function abc(){
        var wid = document.getElementById("iframe_id").contentWindow;
        var sel = wid.getSelection();
        alert(sel.toString());
    }
    </script>
    我这里test.html是我前面贴的页面.
      

  8.   

    iframe里面有对range对操作事件的话.可能会这样
      

  9.   

    额 我想我找到原因了
    我选中cell后 
    然后点击了右键 在弹出的自定义右键菜单中选择一条命令 
    然后我再这条命令中执行了 这段javascript代码
    这个时候range区域已经发生了改变额 多谢楼上同志
    是个好同志 
      

  10.   

    额 似乎问题又来了
    如何在鼠标事件点击发生后 取得点击事件前获取的对象呢?
    因为鼠标事件发生后,前面的selection对象似乎已经发生了改变
    呵呵  是在不好意思啊