在Javascript中按范围设置选择

在Javascript中按范围设置选择,javascript,range,textselection,Javascript,Range,Textselection,我想通过使用Javascript发送位置/锚定偏移量和长度/偏移量来选择文本这是我的代码 var node = document.getElementById("content"); var range = document.createRange(); range.setStart(node, 0); range.setEnd(node, 4); // here 0 and 4 is my location and length for the selection

我想通过使用Javascript发送位置/锚定偏移量和长度/偏移量来选择文本这是我的代码

  var node = document.getElementById("content");
   var range = document.createRange();
   range.setStart(node, 0);
   range.setEnd(node, 4); // here 0 and 4 is my location and length for the selection
       // if my string is "This is test string" in my case its must select "This" 
   var selection = window.getSelection();
   selection.removeAllRanges();
    selection.addRange(range);
但是问题是range.setStart和range.setEnd没有像我预期的那样工作

DOM range的
setStart()
setEnd()
方法都有很好的规定,因此您可以通过阅读或查看来找到答案

总之,如果要根据字符偏移量指定范围边界,则需要处理文本节点而不是元素。如果元素包含单个文本节点,则将代码的第一行更改为以下内容将有效:

var node = document.getElementById("content").firstChild;

如果您试图选择jquery结果集,这里有一个很好的解决方案

var $newSelection = $('.someElements');
var selection = window.getSelection();
var range = document.createRange();
range.setStartBefore($newSelection.first()[0]);
range.setEndAfter($newSelection.last()[0]);
selection.removeAllRanges();
selection.addRange(range);

@我正在我的IOS应用程序中使用它。剩余的功能可以正常工作,但问题是setStart和setEnd都不能正常工作working@AndyG:方向不对
document.createRange()
是标准配置,除IE Thank you@TimDown外,其他配置均支持。我正在看
selection.createRange
。如果我在“内容”中只有一行文本,那么它就可以很好地工作了。如果我在字符串上应用了粗体或字体标记,该怎么办。@ShinningRiver:那么您需要一个更复杂的解决方案,如