我正在尝试使用coffeescript / javascript创建一个范围,当用户滚动某些文本时,该范围会返回几个文本句子。我有偏移移动40个位置,但这有时意味着进入前一个节点。我该如何正确地实现这一目标?
我所拥有的(只要我不离开节点就可以工作):
//expanding a previously defined range
new_start = range.startOffset- 40
startNode = range.startContainer
range.setStart(startNode, new_start)
try
new_end = range.startOffset + 60
range.setEnd(startNode, new_end)
catch e
range.setEndAfter(startNode)
正如你所看到的,我的代码不是很好并且做了很多假设,因此当涉及到横向移动这些节点时,有人可以引导我朝着正确的方向前进,我会非常高兴。
标记样本(非常糟糕):
<div id="content"><p>
<strong>Title Stuffs<br>
Yep, a random break<br>
yes, another!</strong>
</p>
<p>
<a href="http://internet.co">http://itnernet.co</a>
</p>
<br>
<table>
<tbody>
<tr>
<td>
<img src="someimage">
</td>
</tr>
</tbody>
</table>
<p>
<br>
Blah blah blah<br>
<br>
more words, going to stop here. you get the idea.
</p></div>
这个问题是我previous questions之一的跟进。
答案 0 :(得分:1)
这一行之后:
new_start = range.startOffset- 40
检查new_start是否为负数,如果是则将其设置为零。这是代码:
new_start = range.startOffset - 40;
if(new_start < 0)
new_start = 0;
这就是你当前的问题。你确实有另一个问题。您的结尾也可能溢出当前文本。因此,您应该检查endOffset < selection.extentNode.length
。