我们如何从java脚本中的父元素开始设置所选文本?

时间:2014-05-19 05:32:27

标签: javascript ios iphone

我在使用javascript时面临一些问题。场景就像html对象有一个父元素段和4个子元素跨度。当我们选择文本时,我们获得了关于span元素的文本位置,但我想获得文本选择与父母相关的文本,那么请你指导我怎么做? 我使用此代码,每次都为所选容器提供位置,如

<p>I'm using this code that each time<span>give position with respect to selected container like</span></html>

我想获得文字位置&#34;对于&#34;关于p标签的高级代码,而不是对span标记的评价。

var sel = window.getSelection();
    var selRange      = sel.getRangeAt(0);
    var start         = selRange.startContainer;
    var startElemPath = pathOfElement(start);
    var startoff      = selRange.parentNode.startOffset;
    alert("startoff>>"+startoff);
    var end           = selRange.endContainer;
    var endElemPath   = pathOfElement(end);
    var endoff        = selRange.endOffset;

2 个答案:

答案 0 :(得分:1)

您可以使用此过程开始设置并结束所选文本的设置。

function getCaretCharacterOffsetWithin(objectId, win)
{
    var startOffSet = 0;
    var endOffset = 0;
    var element = window.frames[0].document.getElementById(objectId);
    var parentInnerHTML = element.innerHTML.toString();
    var parentNodeArr = parentInnerHTML.split('');
    if(parentInnerHTML != "null"){
        var sel;
        if (typeof win.getSelection != "undefined")
        {       
            var rangeIndex = 0; 
            var parentIndex = 0;
            var max = parentInnerHTML.length - 1;
            var range = win.getSelection().toString();
            var rangeNodeArr = range.split('');
            var rangeLen = rangeNodeArr.length - 1;
            for (parentIndex=0; parentIndex <= max; parentIndex++)
            {
                if(parentNodeArr[parentIndex] === rangeNodeArr[rangeIndex]){
                    if(rangeIndex === rangeLen){
                        break;
                    }
                    rangeIndex++;
                }else{
                     rangeIndex = 0;
                }
            }
            endOffset = parentIndex + 1;
            startOffSet = parentIndex - rangeIndex;
        }
        console.log("startOffSet: " + startOffSet + " endOffset: " + endOffset);
        return { startOffSet: startOffSet, endOffSet: endOffset };
    }else{
        console.log("Parent is null");
    }
}

答案 1 :(得分:0)

尝试将Range的开始节点设置为p

startNode = document.getElementsByTagName("p")[0];
selRange.setStart(startNode,0);