2012-07-04 30 views
1

我正在編寫一個所見即所得的編輯器。因爲它必須包含一些基本功能,所以我想自己做,並避免出現問題。現在它的工作完美,但我想添加一個功能,以unbold,單元...Javascript - 比較字符串環境

我知道,與execCommand它是一個自動的事情,但它不會以同樣的方式在所有瀏覽器中如此工作。 ..我的想法是在未來:當按下粗體按鈕,檢查字符串的環境,...

  • 如果選擇開啓和關閉<b>標籤之間,就像<b>ab||selected||cd</b></b>selected<b>取代selected
  • 如果選擇開始或與<b>標籤完成後,像<b>ab||selected||</b>通過</b>selected<b>替換它(然後去掉所有<b></b>的基團。)
  • 如果選擇開始並與<b>標籤完成後,像<b>||selected||</b>通過</b>selected<b>替換它(然後去掉所有<b></b>組。)

但是...我怎麼能進入一個變種只是具有content插入符號/選擇當<b>content</b>字符串?這可能是...

UPDATE
很好奇,替換總是一樣的。那麼,我真的應該得到我要求的東西嗎,或者只是以這種方式替換它,總是呢?

+1

您是否考慮過像操作DOM樹那樣的內部數據結構,而不是試圖自己操縱字符串? – SpacedMonkey

+0

謝謝你的回答。我將iframe中的所有數據都作爲HTML(並在發送之前將其轉換爲BBCODE)。所以我正在處理一個iframe窗口(在初始化編輯器時用javascript創建)。怎麼能得到關於你告訴我什麼的更多信息? – Kenedy

+0

對不起,我不知道答案,你仍然留下確定選擇的問題。最好不要理我 – SpacedMonkey

回答

1

我正在編寫一個所見即所得的編輯器。由於它只包含一些基本的功能,所以我想自己做,並避免出現問題。現在,它正在 完美,但我想,以取消粗體, unitalic添加功能...

不要寫自己的所見即所得的編輯器。

你真的想「避免問題」嗎?然後使用現有的好編輯之一(其實只有2個......也許3個)。創建編輯器是極其困難的任務,你需要很多時間(我的意思是......幾年),很多知識和耐心(很多也是:P)。

我可以自己寫「我正在編輯WYSIWYG編輯器」。在一年半的時間裏,我是這些「優秀編輯」的核心開發人員之一。在此期間,我只實現了一個功能 - 非常重要且非常複雜,但是其中有數十個/數百個功能。

你有這個問題...我甚至不想開始回答。這聽起來像是小菜一碟,但事實並非如此。這是一塊磚塊,當你掉在頭上時可以殺死你:)。我只會開始枚舉impl的重要部分:Selection +範圍實現,因爲本地不同並且有bug(〜5k LOC + min Nk LOC用於測試)。然後你需要適當的樣式處理(應用和刪除)impl(min 1k LOC + tests),因爲你必須關心跨越多個塊的樣式(如整個表格粗體)以及包含部分或整個樣式的不同選擇等。您必須避免使用本機execCommand,因爲它們會破壞您的內容。然後,您還應該考慮更新工具欄按鈕的狀態,並且爲了讓您的impl符合要求,可以處理不同的樣式標籤(例如粘貼)。而這只是冰山一角 - 你會有風格處理,但其他數百個東西被打破。大編輯們已經修復的東西。

無論如何 - 學習主編輯器之一的配置選項並根據需要對其進行自定義。這需要幾個小時,而不是幾年。

+0

jeje ...聽起來像是一個很大的真理:)好吧,也許我可以搜索一個簡單的,並以我自己的方式進行編輯。你是指哪些編輯? TinyMCE的?我只需要基礎知識(粗體,斜體,圖像,URL和表格不多) – Kenedy

+0

我正在研究CKEditor,所以它是最好的:P但是有TinyMCE,第三個可以是Aloha,看起來相當不錯,但是我沒有正確測試它。我看到的其他所有的東西都完全錯誤,因爲它們過多地依賴本地API(命令,粘貼等)。 – Reinmar

+1

順便說一句,我沒有寫清楚,但編寫編輯器的核心時,實現像基本樣式,列表創建,所有類型的工具欄等功能相對容易。這個核心是最棘手的部分 - > 30k LOC,其中> 25%是技巧和黑客。核心我的意思是整個DOM部分(包括選擇和範圍),焦點管理器,引導程序邏輯(不太容易),自定義事件,自定義輸入/標籤支持,自定義剪貼板支持,撤消支持,數據處理,按鍵處理程序,異步腳本加載器,a11y支持,光DOM ... – Reinmar