求containsNode()兼容ie的实现方法

需求描述:正文有五个段落,现在需要判断用户是否选中了相应的段落,代码如下

<body>
    <p>第一段 大家好大家好大家好大家好大家好大家好大</p>
    <p>第二段 大家好大家好大家好大家好大家好大家好大</p>
    <p>第三段 大家好大家好大家好大家好大家好大家好大</p>
    <p>第四段 大家好大家好大家好大家好大家好大家好大</p>
    <p>第五段 大家好大家好大家好大家好大家好大家好大</p>

    <script>
        var para = document.getElementsByTagName('p');
        var result = [];
        document.onmouseup = function(){
            var selectText = window.getSelection();//获取选区对象,ie9+支持
            if(selectText.toString()){
                for (var i = 0;i<para.length;i++){
                    if(selectText.containsNode(para[i],true)){
                        result.push(i+1);//返回相应段落的序号
                    }
                }
                alert(result);
                result = [];//重新置空
            }
        }    
    </script>
</body>

当我选中如下内容时:
图片描述

会弹出1,2,3,表示选中了第一二三段。

由于containsNode()方法不适用ie浏览器,现在写的代码在ie环境下就失效了。
紧急求助:一个兼容ie的containsNode()方法;或者能通过其他方法达到同样的效果,万分感谢!

如果上面的问题解决了,已经太太感谢您了,还有一个瑕疵的地方也请您多多指教一下。当鼠标双击选中如下部分时:
图片描述

却会弹出1,2,这是为什么?

在线24小时等候答案,先提前谢谢各位了!

阅读 3.2k
1 个回答
新手上路,请多包涵

1、不只是IE不兼容containsNode的问题,关于containsNode的问题,IE有contains方法;
2、低版本IE不支持window.getSelection(),要用document.selection这个对象,但这个对象与window.getSelection()获取的对象类型不同;
3、推荐使用:rangy

推荐问题