2010-06-13 788 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