Javascript+;如何从选择的父节点&x2B;获取索引w.r.t;IE以外的浏览器

Javascript+;如何从选择的父节点&x2B;获取索引w.r.t;IE以外的浏览器,javascript,indexing,selection,parent,browser,Javascript,Indexing,Selection,Parent,Browser,嗨,我想获取与所选文本的父节点相关的选择开始和结束索引。 我能在IE中做到这一点。 但是在其他浏览器中,如Firefox、Opera、Safari和Chrome,我可以访问所选文本的选择和索引。但我的要求是获取父节点而不是所选节点的索引w.r.t。 我需要一个支持所有浏览器的解决方案——Firefox、Opera、Safari和Chrome if (window.getSelection) { alert("Other browser");

嗨,我想获取与所选文本的父节点相关的选择开始和结束索引。 我能在IE中做到这一点。 但是在其他浏览器中,如Firefox、Opera、Safari和Chrome,我可以访问所选文本的选择和索引。但我的要求是获取父节点而不是所选节点的索引w.r.t。 我需要一个支持所有浏览器的解决方案——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);
    }}
if(window.getSelection){
警报(“其他浏览器”);
sel=window.getSelection();
如果(sel!=''){
//警报(sel.anchorNode.parentNode.nodeName);
//警报(选择主播偏移);
//警报(sel.focusNode.parentNode.nodeName);
//警报(选择焦点偏移);
}
}    
else if(document.selection){
txt=document.selection.createRange().text;
var range_all=document.body.createTextRange();
如果(txt!='')
{
//寻找起始位置
range=document.selection.createRange();
范围。塌陷(真);
var startParentElement=range.parentElement();
范围_all.moveToElementText(startParentElement);
对于(var sel_start=0;range_all.compareEndPoints('StartToStart',range)<0;sel_start++)
范围_all.moveStart('character',1);
range=document.selection.createRange();
范围。塌陷(假);
range_all=document.body.createTextRange();
var endParentElement=range.parentElement();
range_all.moveToElementText(endParentElement);
对于(var sel_end=0;range_all.compareEndPoints('StartToEnd',range)<0;sel_end++)
范围_all.moveStart('character',1);
警报(“选择启动:+选择启动”);
警报(“sel_end:+sel_end”);
}}

QuirksMode网站可以帮助您:


您只需了解如何在IE以外的浏览器中使用range对象。

QuirksMode网站可以在以下方面帮助您:


您只需要了解如何在IE以外的浏览器中使用范围对象。

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

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

API:

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

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

API:

我需要两个范围对象—一个用于选择,另一个用于整个文档。quirksmode站点中解释的代码有助于仅为选择创建范围。对于整个文档,我尝试使用window.document.createRange或document.createRange。但是我得到的是一个空值,我需要两个范围对象——一个用于选择,另一个用于整个文档。quirksmode站点中解释的代码有助于仅为选择创建范围。对于整个文档,我尝试使用window.document.createRange或document.createRange。然而,我得到的是一个空值。