Rangy:如何根据父节点扩展选择?

时间:2011-11-29 14:04:21

标签: javascript rangy

正在选择的html:

some te<b>xt here is bold</b>ed, I guess
              |______________________|  <- the selection range

所以,选中的.toHtml()是这样的:

<b>ere is bold</b>ed, I gue

但这不在原始文件中。

所以,我想要做的是扩展选择,使其包含整个BOLD标签。

这很容易检测,因为你只需要进行测试

a = rangy.getSelection()
a.anchorNode.parentElement != a.focusNode.parentElement

文档指出rangy范围采用setStartBefore(Node)方法:http://code.google.com/p/rangy/wiki/RangyRange

所以,我得到了当前的范围

b = a.getRangeAt(0)

并尝试setStartBefore:

b.setStartBefore(a.anchorNode.parentNode)

因为我在控制台中完成了这一切,所以我立即得到反馈

undefined

导致这种情况的原因,以及如何找到解决我想要解决的问题的解决方案?

更新: 根据Tim Down的建议,我尝试了以下内容:
enter image description here 原文:
enter image description here

它应该已经扩展到包括 Mass Ef 它不应该有吗?

更新2:

解决方案(根据Tim Down) enter image description here

1 个答案:

答案 0 :(得分:3)

您需要重新选择范围:

a.setSingleRange(b);

顺便提一句parentElement并非普遍支持:它仅从IE开始,最近已进入DOM4 spec并且在Firefox中尚不支持(support is coming in Firefox 9.0,显然) 。您需要基于parentNodenodeType的解决方法。