【发布时间】:2023-01-18 23:28:25
【问题描述】:
在 JavaScript 范围选择中是否可以防止选择部分节点?
例如:
“那只巨大的猫坐在非常小的地毯上。”
用户可能会选择“猫“而且通常情况下,他们的鼠标选择不是那么精确,并且还包括两侧的可见空间,因此选择范围几乎总是包括”巨大的“ 和 ”坐着“这是我们不想要的。
每个跨度包含一个单词。单词之间的可见空间可以是 span 标签内的真正空白,用换行符堆叠的 span,它可以是填充,它也可以是 css 单词空间,甚至是一个不间断的空间。无论哪种方式,如果用户的选择无意中误入了另一个节点,默认当然是将节点作为选择的一部分返回。
如何避免这种情况?
欣然接受任何指点。
非常感谢你。
示例代码:
<span id="a1">The </span>
<span id="a2">enormous</span>
<span id="a3"> cat </span><span id="a4">sat</span>
<span id="a5"> on </span><span id="a6" style="padding-right: 2px;">the</span>
<span id="a7">very </span><span id="a8">small </span><span id="a9">rug</span><span id="a10">. </span>
【问题讨论】:
-
您只想将选择限制为一个词,还是我遗漏了什么?
-
您好,感谢您的回复。用户可能希望选择多个单词并且可能希望跨行。对不起,如果问题不清楚。我们想要的是保留所有已经被完全选中的词,并丢弃那些已经被包含的词,因为用户的选择已经越过了相邻词/节点的边界,尽管他们不可见,他们只是假设它是空白但实际上它包括那个相邻的跨度。这是我们希望避免的。
-
好的,跨度节点是必需的吗?可以是纯文本吗?
-
跨度或其他 html 标记是必要的,因为我们然后获取 id
标签: javascript jquery range selection