【问题标题】:Rangy: how do I expand the selection based on parent node?Rangy:如何根据父节点扩展选择?
【发布时间】:2011-11-29 14:04:20
【问题描述】:

被选中的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

文档指出范围很广的范围有一个setStartBefore(Node) 方法:http://code.google.com/p/rangy/wiki/RangyRange

所以,我得到了当前范围

b = a.getRangeAt(0)

并尝试 setStartBefore :

b.setStartBefore(a.anchorNode.parentNode)

并且由于我在控制台中执行所有这些操作,我会立即收到反馈说

undefined

什么会导致这种情况,我将如何解决它以找到我想要解决的问题的解决方案?

更新: 根据 Tim Down 的建议,我尝试了以下方法:
原文:

它应该扩大到包括 Mass Ef 不应该吗?

更新 2:

解决方案(根据 Tim Down)

【问题讨论】:

  • 问题中提供的解决方案实际上并不是真正的解决方案。如果是,“b.canSurroundContents()”将返回“true”。我正在尝试做同样的事情,但仍然无法让“b.canSurroundContents”返回 true。有什么想法吗?
  • 我这里已经详细询问过了,举例:stackoverflow.com/questions/13141992/…

标签: javascript rangy


【解决方案1】:

您需要重新选择范围:

a.setSingleRange(b);

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

【讨论】:

  • 我不太担心浏览器的兼容性。但我很欣赏这个警告,因为我很快就会担心它。我已经用尝试 a.setSingleRange(b); 的结果更新了我的问题;
  • @TheLindyHop:从那张截图来看,在重新选择之前,您似乎没有对范围进行任何操作(setStartBefore() 等)。
  • 太好了,我将发布我所做的屏幕截图,以使其对未来有问题的人有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多