在特定偏移量处将距离范围分成两个
Split rangy range into two at specific offset
好吧,在过去的几个小时里,我一直在为这个问题伤脑筋,希望这里有人对rangy库有更多的经验。假设我有以下html:
<p>Lorem Ipsum<note>that's latin</note> is a placeholder text</p>
<p>It is often used in graphic design<note>some other note</note></p>
我们得到了一个由{和}字符表示的选择:
<p>Lorem {Ipsum<note>that's latin</note> is a placeholder text</p>
<p>It is often used in graphic design<note>some other note</note>.}</p>
你怎么能把范围分割成3个范围对象呢?
-
Ipsum
-
is a placeholder text</p><p>It is often used in graphic design
-
.
目标是排除一组元素,在本例中是['note']
。我不需要一个功能齐全的解决方案,所有我正在寻找的是一种方法来"分裂"一个范围在范围的某一点。
这并不是真正特定于Range的,因为您将只使用标准的Range方法。下面是一个简单的函数,它将处理常规DOM范围或Rangy范围。它以类似于文本节点的splitText()
方法的方式将范围一分为二:将原始范围的结束边界移动到分割点,该函数返回一个从分割点开始并以原始范围的原始结束边界结束的新范围。
function splitRange(range, node, offset) {
var newRange = range.cloneRange();
newRange.setStart(node, offset);
range.setEnd(node, offset);
return newRange;
}
如果你愿意,你可以把这个方法添加到所有的Rangy范围中:
rangy.rangePrototype.splitRange = function(node, offset) {
var newRange = this.cloneRange();
newRange.setStart(node, offset);
this.setEnd(node, offset);
return newRange;
};
然后您可以将示例选择分割如下:
// Get the <p> elements in the example HTML
var allPs = document.getElementsByTagName("p");
var range1 = rangy.getSelection().getRangeAt(0);
// Split after the first child of the first <p>
var range2 = range1.splitRange(allPs[0], 1);
// Split after the first child of the second <p>
var range3 = range2.splitRange(allPs[1], 1);
range1
, range2
和range3
现在按您的要求。
相关文章:
- 如何从日期范围选择器中获取两个日期
- 在两个浏览器选项卡之间共享变量范围
- 在Jquery或Javascript中获取两个范围或日期之间的通信周数
- 连接angularjs中的两个范围模型
- 角度,用两个点设置范围变量
- 选择绑定到同一范围的按钮,单击时会相互触发.如何从angular.js中的两个选择列表按钮解除范围绑定
- 使用javascript获取两个输入范围的值
- 如何放置日期范围从周选择器用于两个文本输入
- 正则表达式用于验证两个范围之间的数字
- Javascript:在范围内生成随机数,避免前两个
- 日期范围选取器 在两个日历上显示结束日期
- 无论哪一天,如何获得两个小时范围内的时间
- Google 应用脚本:返回 2 个两个范围之间唯一值的函数
- 生成两个范围之间的日期(js)
- 如何将两个范围值相加,然后乘以一个select标记
- 在javascript中获取两个范围之间的交集
- 在morris.js折线图中绘制两个范围的y轴
- 同时更改两个范围- javascript
- 基于级别数组协调两个范围输入
- 是否可以在一个简短的内联事件中滑动两个范围输入元素