JavaScript +如何获取选择的父节点的索引+ IE以外的浏览器

发布于 2024-09-10 10:44:39 字数 2075 浏览 3 评论 0原文

您好,我想获取相对于所选文本的父节点的选择开始和结束索引。 我可以在 IE 中做到这一点。 然而,在其他浏览器(如 Firefox、Opera、Safari 和 Chrome)中,我能够访问所选文本的选择和索引。但我的要求是获取父节点的索引,而不是所选节点的索引。 我需要一个支持所有浏览器的解决方案 - Firefox、Opera、Safari 和 Chrome

    if (window.getSelection) { 
                     alert("Other browser");     
                     sel = window.getSelection();

                        if(sel != '') {
               //alert(sel.anchorNode.parentNode.nodeName);
             //alert(sel.anchorOffset);
             //alert(sel.focusNode.parentNode.nodeName);
             //alert(sel.focusOffset);                
 }
                    }    
        else if (document.selection) {   
                        txt = document.selection.createRange().text;
                        var range_all = document.body.createTextRange();
                        if (txt!='' )
                        {
                            // Finding start position
                         range = document.selection.createRange();
                            range.collapse(true); 

                         var startParentElement =  range.parentElement();                 

                            range_all.moveToElementText(startParentElement);
                            for (var sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start ++)
                                range_all.moveStart('character', 1);
                            range = document.selection.createRange();
                            range.collapse(false); 
                            range_all = document.body.createTextRange();

                         var endParentElement =  range.parentElement();                 
                                                 range_all.moveToElementText(endParentElement);
                            for (var sel_end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; sel_end ++)
                              range_all.moveStart('character', 1);
    alert("sel_start:" + sel_start);
                        alert("sel_end:" + sel_end);
    }}

Hi I want to get the selection start and end index with respect to the parent node of the selected text.
I am able to do this in IE.
However in other browsers like Firefox, Opera, Safari and Chrome, I am able to access the selection and the index of the selected text. But my requirement is to get the index w.r.t the parent node and not the selected node.
I am in need of a solution that supports all browsers - Firefox, Opera, Safari and Chrome

    if (window.getSelection) { 
                     alert("Other browser");     
                     sel = window.getSelection();

                        if(sel != '') {
               //alert(sel.anchorNode.parentNode.nodeName);
             //alert(sel.anchorOffset);
             //alert(sel.focusNode.parentNode.nodeName);
             //alert(sel.focusOffset);                
 }
                    }    
        else if (document.selection) {   
                        txt = document.selection.createRange().text;
                        var range_all = document.body.createTextRange();
                        if (txt!='' )
                        {
                            // Finding start position
                         range = document.selection.createRange();
                            range.collapse(true); 

                         var startParentElement =  range.parentElement();                 

                            range_all.moveToElementText(startParentElement);
                            for (var sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start ++)
                                range_all.moveStart('character', 1);
                            range = document.selection.createRange();
                            range.collapse(false); 
                            range_all = document.body.createTextRange();

                         var endParentElement =  range.parentElement();                 
                                                 range_all.moveToElementText(endParentElement);
                            for (var sel_end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; sel_end ++)
                              range_all.moveStart('character', 1);
    alert("sel_start:" + sel_start);
                        alert("sel_end:" + sel_end);
    }}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

提赋 2024-09-17 10:44:39

QuirksMode 网站可以在这里为您提供帮助:http://www.quirksmode.org/dom/range_intro.html

你只需要学习如何在 IE 以外的浏览器中使用 range 对象即可。

QuirksMode site can help you here: http://www.quirksmode.org/dom/range_intro.html

You just need to learn how to use the range object in browsers other than IE.

黯然#的苍凉 2024-09-17 10:44:39

在这些浏览器中,您应该使用从 window.getSelection 获得的 Range 对象。

var range = sel.getRangeAt(0).cloneRange();
//range.endContainer, range.startContainer etc.

API: https://developer.mozilla.org/en/docs/Web/API /范围

In these browsers you should work with a Range object you get from window.getSelection.

var range = sel.getRangeAt(0).cloneRange();
//range.endContainer, range.startContainer etc.

API: https://developer.mozilla.org/en/docs/Web/API/Range

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文