Trim 使用 Rangy 选择的空白

Trim whitespace from selection with Rangy

我正在使用 Rangy 1.2。假设用户选择文本“abcd”。我正在尝试 trim 选择 "abcd"。

我已经创建了一个 Rangy 选区,并在选区上设置了范围。似乎我想使用的函数是 setStartAfter(node) 但它没有为我返回任何东西。

我一直在关注这些文档:https://code.google.com/p/rangy/wiki/RangyRange

谢谢

一般来说,这有点棘手,因为 space 字符可能与 "abcd" 不属于同一节点。 Rangy 1.2 没有任何特殊方法可以帮助您:Range 实现与 DOM Range 相同,有一些扩展,因此问题与没有 Rangy 时没有什么不同。如果所有文本都在一个文本节点内,例如“123 abcd efg”,并且用户选择了“abcd”,则需要执行类似的操作,假设您在变量中引用了文本节点称为 textNode 和变量中的选择范围称为 range:

range.setStart(textNode, 4);
rangy.getSelection().setSingleRange(range);
然而,

Rangy 1.3 有一个 TextRange module 来根据文本处理范围和选择。有了它,你的问题就可以用

解决
rangy.getSelection().trim();

演示:

<script src="https://rawgit.com/timdown/rangy-release/master/rangy-core.js"></script>
<script src="https://rawgit.com/timdown/rangy-release/master/rangy-textrange.js"></script>

<input type="button" onmousedown="rangy.getSelection().trim(); return false" value="Trim selection">
<div contentEditable="true">
  Please select something in here and press the button abcd efgh
</div>