Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取所选文本开头和结尾的字符偏移量_Javascript_Angular - Fatal编程技术网

Javascript 获取所选文本开头和结尾的字符偏移量

Javascript 获取所选文本开头和结尾的字符偏移量,javascript,angular,Javascript,Angular,对于给定的字符串,我可以使用 var text = window.getSelection().toString(); 我正在尝试获取所选文本的字符偏移量。我试过了 window.getSelection().getRangeAt(0).startOffset 用于选定内容开头的字符偏移量,以及 window.getSelection().getRangeAt(0).endOffset 但是,对于选择结束的字符偏移量,这会给出不正确的结果 例如,对于示例字符串 lskdjfldjf sdl

对于给定的字符串,我可以使用

var text = window.getSelection().toString();
我正在尝试获取所选文本的字符偏移量。我试过了

window.getSelection().getRangeAt(0).startOffset
用于选定内容开头的字符偏移量,以及

window.getSelection().getRangeAt(0).endOffset
但是,对于选择结束的字符偏移量,这会给出不正确的结果

例如,对于示例字符串

lskdjfldjf sdlkjfsdl jflsdk fjlksdjf lksdjfl sdjfl sdjflsdkjfskl
根据上述方法,当我选择第一个单词(即,直到第一个空格的所有单词)时,开始偏移量为41,结束偏移量为51。正确的偏移量应为0和10。我觉得我有点在正确的轨道上,因为偏移之间的差异是正确的,但它只是错误的值。是否有某种方法可以通过编程获得我应该从偏移量中减去的值,以获得正确的偏移量(在本例中为41)?还是有更好的方法来获取所选文本的偏移量

更新:

这里是发生这种情况的较大html块

  <div class="panel panel-default">
              <div class="panel-heading"><strong>Example {{i + 1}} of {{examples.length}}</strong></div>
                      <div class="panel-body">
                            <div (mouseup)="showSelectedText(i)">
                                            {{example.labelled}}
                            </div>
                       </div>
    </div>

示例{{examples.length}}中的{{i+1}}
{{example.labeled}}

这是一个angular2应用程序。其中函数
showSelectedText()
包含下面使用的选择逻辑,该函数将根据文档返回上的新范围

restoreSelection=函数(savedSel,doc){
var charIndex=0;
var range=doc.createRange();
range.setStart(单据体,0);
范围。塌陷(真);
变量nodeStack=[doc.body],
节点,foundStart=false,
停止=错误;
savedSel.end=savedSel.end;
而(!stop&&(node=nodeStack.pop()){
if(node.nodeType==3){
var nextCharIndex=charIndex+node.length;

如果(!foundStart&&savedSel.start>=charIndex&&savedSel.start=charIndex&&savedSel.end是由于HTML结构引起的

var elem=document.getElementById(“文本”);
document.addEventListener(“mouseup”,function()){
if(window.getSelection)
{
var text=window.getSelection().toString();
var range=window.getSelection().getRangeAt(0);
console.log(range.startContainer.textContent,
range.startOffset,
范围(内偏移)
}
},false);

你让我成为一个,你让我成为一个信徒!
你让我成为一个,你让我成为一个信徒!
你让我成为一个,你让我成为一个信徒!

如果我选择字符串中的第一个单词,我会得到
baseOffset:0
focusOffset:10
。不确定你是如何得到41和51的。你能用JS fiddle重现它吗?@StrahinjaAjvaz我正在使用
window.getSelection().getRangeAt(0).startOffset
window.getSelection().getRangeAt(0).endOffset
请解释
baseOffset
focusOffset
的来源。您可以发布您正在使用的html吗?我认为这就是问题所在。当我将div标记与文本放在同一行时,偏移给出了正确的结果,谢谢