【问题标题】:Creating a range over multiple nodes在多个节点上创建范围
【发布时间】:2013-11-22 07:23:19
【问题描述】:

我正在尝试使用 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 的一个后续问题。

【问题讨论】:

    标签: javascript coffeescript range


    【解决方案1】:

    在这一行之后:

    new_start = range.startOffset- 40
    

    检查 new_start 是否为负数,如果是,则将其设置为零。代码如下:

    new_start = range.startOffset - 40;
    if(new_start < 0)
        new_start = 0;
    

    这就是您当前的问题。不过,您确实还有另一个问题。你的结尾也可能溢出当前文本。所以,你应该检查endOffset &lt; selection.extentNode.length

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多