选择范围内“开始”和“结束”的具体定义

The concrete definitions of "start" and "end" in a selection range

提问人:kakakali 提问时间:3/10/2023 最后编辑:kakakali 更新时间:3/11/2023 访问量:73

问:

使用 DOM 标准

为方便起见,范围的起始节点是其起始节点,其起始偏移量是其开始偏移量,其结束节点是其结束节点,其结束偏移量是其结束量的偏移量。

但我无法弄清楚“开始”或“结束”应该是什么。例如(该代码片段在此演示中不起作用):

    <div class="container" contenteditable="true">
        <p>a</p>
        <p>b</p>
    </div>
document.addEventListener('selectionchange', (e) => {
    const sel = window.getSelection()
    console.log(sel.anchorNode, sel.anchorOffset)
    console.log(sel.focusNode, sel.focusOffset)
    console.log('---')
})

如果您从“a”之前的位置进行选择,并在“b”之前的位置停止。您将得到如下结果 (Chromium):

开始:"a" 0

结束:<p>b</p> 0

那么为什么结尾更喜欢文本节点呢?<p>b</p> 0"b" 0

更一般地说,考虑内联元素:在什么条件下选择哪个文本/内联/块节点作为锚点/焦点节点?是否有规范(针对特定浏览器)?

JavaScript Web DOM 浏览器 W3C

评论

0赞 Bergi 3/11/2023
您引用的部分只是为了规范的语法方便。要弄清楚“开始”或“结束”应该是什么,请看你引用的句子前面的句子:“一个范围有两个相关的边界点——起点终点"
0赞 kakakali 3/11/2023
@Bergi Emm 来说,这似乎是一个概念性定义,而不是一种确定边界点(尤其是选择哪个节点层)的实用方法。
0赞 Bergi 3/11/2023
是的,这是概念,而不是算法如何选择它们

答: 暂无答案