Javascript execCommand的可选选项(';下划线';);

Javascript execCommand的可选选项(';下划线';);,javascript,html,contenteditable,Javascript,Html,Contenteditable,好吧,有些人会知道我的意思,并编辑我的问题,但他们做错了 更好的解释是: 您有一个contenteditablediv,其中包含文本这是一个测试字符串。。 如果现在在测试字符串上使用execCommand('underline'),您会得到这是一个测试字符串 如果现在使用上的execCommand('strikethrough')是一个测试,您会得到这是一个测试字符串,这是正确的 因此,在HTML5中,和是过时的。 对于第一个execCommand,您可以将surroundContents()与

好吧,有些人会知道我的意思,并编辑我的问题,但他们做错了

更好的解释是:

您有一个contenteditable
div
,其中包含文本
这是一个测试字符串。
。 如果现在在
测试字符串上使用
execCommand('underline')
,您会得到
这是一个测试字符串
如果现在使用
上的
execCommand('strikethrough')
是一个测试
,您会得到
这是一个测试字符串
,这是正确的

因此,在HTML5中,
是过时的。 对于第一个
execCommand
,您可以将
surroundContents()
一起使用。如果现在对第二个
execCommand
使用
surroundContets()
,则会收到
坏的\u边界点\u ERR


我想要的是一个类似于本例中的
execCommand
的函数,但我可以使用witch HTML标记定义字符串将被包装的函数…(如果有重叠,它应该是智能的…

CSS
文本装饰:下划线

surroundContents()
将出现问题:如果选择包含多个块元素,例如
s或
s,则包围的内容将被放置在新块中,使其脱离原始位置。要克服这一点,您可以很容易地修改我的回答:

您需要执行以下操作:

  • 使用规则“文本装饰:下划线
  • 为没有的浏览器添加
    intersectsNode
    方法
    Range
    ,例如Firefox(参见MDC的示例:)
  • 如果你关心IE,你需要写一个完全不同的解决方案

除了Javascript和HTML5之外,这里还涉及到一些东西。非常好,哈哈,我不标记CSS,我知道在CSS中如何制作下划线,…问题是关于execCommand(“下划线”)的备选方案,它是一个真正的备选方案,因为即使标记顺序不正确,它也会绕过这个问题。您还可以将命令放入
try..catch
块中,以捕获不正确的使用错误。谢谢,这很有帮助。而且…它在Safari中有效,我不需要更多D