2010-06-13 792 views
2

好的,一些伙计们会知道我的意思,并编辑我的问题,但他们做错了。execCommand的替代方法('underline');

一个更好的解释:

你有CONTENTEDITABLE div与文本This is a Test String.。 如果您现在使用execCommand('underline')Test String您得到This is a <u>Test String</u> 如果您现在使用execCommand('strikethrough')is a Test您得到This <s>is a <u>Test</u></s><u>String</u>,这是正确的。

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

我想要的东西是一个函数,它在这种情况下的工作方式与execCommand类似,但是函数中我可以用巫婆HTML-Tag定义字符串将被包裹...(它应该是智能的,如果有任何重叠... )

+1

除Javascript和HTML5外,还有一些涉及到的内容。 – Pointy 2010-06-13 16:29:07

回答

0

surroundContents()会有问题:如果选择包含多个块元素,例如<div> s或<p> s,则包围的内容将被放置在一个新块中,将其从原始位置中分离出来。为了克服这一点,你可以很容易地适应这里我的答案:apply style to range of text with javascript in uiwebview

你需要做到以下几点:

  • 创建规则的CSS类“文本装饰:下划线;”
  • 添加的RangeintersectsNode方法没有它的浏览器,比如Firefox(见MDC为例:https://developer.mozilla.org/en/DOM/range.intersectsNode
  • 如果你关心IE浏览器,你需要写一个完全不同的解决方案。
+0

谢谢,这有帮助。而且...它在Safari中工作,我不需要更多。 :d – Phil 2010-06-14 15:53:24

0

CSS text-decoration: underline

+1

非常好,哈哈,我没有标记CSS 我知道它如何在CSS中作出下划线,... 这个问题是关于execCommand的替代('underline') – Phil 2010-06-13 16:35:00

+1

这是一个真正的替代,因为它即使标记顺序不正确,也会绕过此问题。 – Thevs 2010-06-13 17:02:59

+0

您也可以将您的命令放入'try..catch'模块以捕获不正确的使用错误。 – Thevs 2010-06-13 17:06:40