替代execCommand('underline')的方法是什么?

4

好的,有些人会知道我在说什么并修改我的问题,但他们做错了。

更好的解释:

你有一个可编辑的 div,其中包含文本 This is a Test String.。 如果现在在 Test String 上使用 execCommand('underline'),你将得到 This is a <u>Test String</u> 如果现在在 is a Test 上使用 execCommand('strikethrough'),你将得到 This <s>is a <u>Test</u></s><u>String</u>,这是正确的。

因此,在 HTML5 中,<u><s> 已经过时。 对于第一个 execCommand,你可以使用带有 <span style="text-decoration:underline;">surroundContents()。如果你现在对第二个 execCommand 使用 surroundContets(),你将收到 BAD_BOUNDARYPOINTS_ERR

我想要的是一个函数,在这种情况下,它的工作方式类似于 execCommand,但是我可以定义字符串将用哪个 HTML 标记包装...(如果有任何重叠,它应该是智能的...)


1
这里涉及到的不仅仅是Javascript和HTML5。 - Pointy
2个回答

1

surroundContents() 方法存在问题:如果选择包含多个块元素,例如 <div><p>,则被包围的内容将被放置在一个新的块中,从其原始位置中断。为了克服这个问题,您可以轻松地适应我在此处的答案:使用JavaScript在UIWebView中应用文本范围样式

您需要执行以下操作:

  • 创建一个 CSS 类,规则为 "text-decoration: underline;"
  • 为那些没有 intersectsNode 方法的浏览器(如 Firefox,参见 MDC 的示例:https://developer.mozilla.org/en/DOM/range.intersectsNode),添加一个 Range 的方法。
  • 如果您关心 IE,则需要编写完全不同的解决方案。

谢谢,这很有帮助。而且...在Safari中可以工作,我不需要更多了。 :D - Phil

0

CSS text-decoration: underline


2
非常好,哈哈,我不打CSS标签 我知道如何在CSS中制作下划线,... 问题是execCommand('underline')的替代方法。 - Phil
1
这是一个真正的替代方案,即使标签顺序不正确,它也可以解决这个问题。 - Thevs
您还可以将您的命令放入 try..catch 块中以捕获错误的使用。 - Thevs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接