2012-11-09 59 views
3

當您使用所見即所得編輯器,並且選擇文本並應用(例如對其加粗)時,瀏覽器將使用<span style="font-weight:bold">標記(假設您已調用document.execCommand("useCSS", false)和/或document.execCommand("styleWithCSS", true))。現在,如果你選擇的是一個子集,並重新申請大膽,將原來的大膽標籤拆分成類似下面的應用自定義樣式時拆分HTML標記

<span style="font-weight:bold">Something</span> 
Not selected 
<span style="font-weight:bold">Selected</span> 

在產品我的工作,我們支持一系列的所見即所得功能,包括一些不直接受execCommand支持的方法(例如添加文本的級別(類)以應用font-family和font-size),並且我們遇到嵌套標記的問題。有沒有辦法告訴瀏覽器從樣式中移除當前範圍,並且基本上關閉之前的標籤並在內容之後打開新的標籤?

我不會立即在execCommand reference中看到一些東西。

我們使用rangy 1.2.3取得了一些成功,但我不知道是否有一些命令我錯過了。

由於添加了多個樣式,因爲在上面的示例中添加了粗體和斜體,然後在中間刪除粗體會生成三個跨度,兩個粗體和斜體文本,中間只有斜體。

目前,我們限制使用我們的編輯器到Chrome。

+1

是的,強制用戶使用標記將是一個更穩定的解決方案,但使用該應用程序的人並不熟悉這一點,所以我們必須提供一個所見即所得的編輯器來創建他們的材料 –

+1

我打算編寫一個模塊在Rangy做到這一點,去年的時間確實相當長,但實際上它不太可能準備好幾個月。 –

+0

您是否嘗試過'removeFormat'命令?這是你在這種情況下唯一可以處理的事情。 – skyline3000

回答

0

如果您擔心的是輸出錯亂,渲染正確,您應該從編輯器無關的角度來處理它,因爲這會影響所有HTML butes,特別是rangy和其他所見即所得編輯器/用戶格式的代碼。

,以減少混亂的最快方法是限制提供給用戶的標記選項:

  • 限制(如果不是禁用)字樣或用大量的代碼
  • 考慮解決方案等風格/元素正是專爲這種困境,如BB代碼或降價語法

如果你不能交換的編輯,因爲客戶需要從MS Word中的紅色/藍色文本,PHP Tidy應該是足夠的,因爲它甚至可以處理微軟Office的HTML導出!使用merge-spans配置的以下功能應該有效。對於選擇

function tidyHTML($input){ 
    $tidy = new tidy(); 
    $config = array(
     'ascii-chars' => true, 
     'bare' => true, 
     'clean' => true, 
     'drop-empty-paras' => true, 
     'drop-proprietary-attributes' => true, 
     'hide-endtags' => true, 
     'indent' => true, 
     'logical-emphasis' => true, 
     'merge-spans' => true, 
     'show-body-only' => true, 
     'word-2000' => true, 
     'wrap' => false 
    ); 
    return $tidy->repairString($input, $config); 
} 
echo tidyHTML($wysiwyg_output); 

文檔可以發現here

+0

這不是一個特別有用的答案。這是針對HTML/Javascript,而不是PHP。另外,這並不是真正關於混亂的HTML,它顯示正確,但更多的是關於避免標籤以導致無效顯示的方式嵌套的情況,比如' ABC GHI'應該是' ABC DEF GHI'這個特殊的例子*在應用level2之前使用level1的undoToSelection進行rangy,但存在更具體的場景。 –

+0

此外,在上面的評論中指出,BBCode和Markdown(或者其他任何標記語法)都不適用。 –

+0

對不起。我有一些麻煩,理解你究竟在問什麼,沒有看到上面提到的BBCode/Markdown ...無論如何,這裏的側邊欄有一個問題(http://stackoverflow.com/q/11111704/1105203)與鏈接的解決方案似乎相同:http://help.dottoro.com/external/examples/ljcvtcaw/execCommand_3.htm – Alastair