javascript - 如何在内联粗体标记后对元素进行范围选择?

标签 javascript html range

我已经尝试了所有我能想到的方法,但对于我来说,我无法以编程方式选择粗体标记后的任何文本。我已经在 childNodes 数组中的所有 3 个节点上尝试了 setStart,但它仍然不起作用。

有人可以解释我需要做什么才能让它工作吗?

<div class = "tr" id = "data">
     This text is <b>bold</b> as well it should be.
</div>

<button onclick="makeSelection(1,10);">Selection before bold</button>
<button onclick="makeSelection(35,38);">Selection after bold</button>

然后是 JS:

function makeSelection(start, end) {
var parent = document.getElementById('data');

var range = document.createRange();
        range.setStart(parent.childNodes[0], start);
        range.setEnd(parent.childNodes[0], end);

        var sel = window.getSelection();
        sel.removeAllRanges();
        sel.addRange(range); 
 }

JSFiddle

谢谢!

最佳答案

不完全确定这是否是您想要的,但您可以简单地将 childNode 索引作为函数调用的一部分传递?

<div class = "tr" id = "data">
 This text is <b>bold</b> as well it should be.
</div>

<button onclick="makeSelection(1,18, 0);">Selection before bold</button>
<button onclick="makeSelection(1,23, 2);">Selection after bold</button>

然后简单地更改脚本以使用此变量:

function makeSelection(start, end, child) {
var parent = document.getElementById('data');

var range = document.createRange();
    range.setStart(parent.childNodes[child], start);
    range.setEnd(parent.childNodes[child], end);

    var sel = window.getSelection();
    sel.removeAllRanges();
    sel.addRange(range); 
}

按照您当前的代码,它永远无法到达第 35 - 38 位,因为您仍处于第一个子节点中。调用此函数将搜索节点并收到越界异常,因为第一个节点只有 19 个字符长。

关于javascript - 如何在内联粗体标记后对元素进行范围选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22305079/

相关文章:

Scala Range(x, Int.MaxValue) 与 Stream.from(x)

javascript - Disqus 的 count.js 脚本在带有 react.js 网站的 index.html 中无法正常运行

javascript - 从 CheerioJS DOM 对象中检索所有标签名称

html - 打开网站时,index.html 没有自动打开?

html - JAVAFX TableView CELL 应该在具有多种颜色的单个单元格中以多行显示文本。可能的?

python - 为什么我的代码中收到 "list index out of range"?

javascript - 防止 iframe 滚动

javascript - 寻找 javascript 来分割 URI

javascript - 如何使可编辑 HTML 表格中的表格单元格仅接受数字(不接受字母)?

arrays - Excel VBA : Range to String Array in 1 step