在多个节点上创建范围

时间:2013-11-22 07:23:19

标签: javascript coffeescript range

我正在尝试使用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之一的跟进。

1 个答案:

答案 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