2010-09-02 21 views
2

我創建一個Javascript WYSWYG編輯器(是的,我知道有一百萬已經存在但沒有滿足我的需求),我打了一堵牆。Javascript所見即所得編輯器和字體大小和我難住

我需要在我的編輯只有兩種功能:

1)用戶應該能夠選擇在點指定的任何字體大小。 2)用戶應該能夠在同一編輯器窗口中獲得各種尺寸的文本。

聽起來很簡單,但您會驚訝於這有多困難。

我已經看過TinyMCE,NicEdit,FreeRichTextEditor,TinyEditor,openWYSIWYG,WYMeditor,jHtmlArea,uEditor,CLEditor,jQRTE,jQuery簡單所見即所得的編輯器和xinha,它們都沒有這兩個功能。

我能找到的符合條例草案的唯一編輯是Google Docs,CKEditor和YUI Rich Text。谷歌文檔不是一個選項,CKEditor是850美元,對我的項目來說是過分的,而YUI Rich Text編輯器也太複雜了。我只想要一個具有這兩個功能的簡單編輯器。

這是我項目的一大障礙。

無論發現哪種解決方案都必須輕量且免費。例如,YUI文本編輯器工作,但取決於YUI JavaScript庫,它太大,不容易分解和剝離。

+0

TinyMCE的可*使用的字體點*和*可以在同一頁面不同大小*。 – Frankie 2010-09-02 03:16:17

+0

它只允許您從指定的七個選項中進行選擇。如果你看看它生成的代碼,它不會使用pts。 – Bryce 2010-09-02 04:53:15

回答

0

我已經在基於IE的控件中完成了這項工作。總結:

  1. 用戶選擇一段文本並在GUI中選擇不同的字體大小。
  2. 在Javascript中:
    1. 使用瀏覽器的DOM來獲得當前的文本選擇對象。
    2. 創建一個新的SPAN元素,根據需要設置CSS樣式font-size屬性(例如:12pt)。
    3. 將SPAN的內部文本設置爲最初選擇的文本。
    4. 從文檔中刪除選定的文本。
    5. 將新的SPAN插入相同的位置。

當然具體取決於瀏覽器/ s的你的目標。如果你需要支持使用庫(JQuery等)的許多瀏覽器可能是要走的路。

如果我沒有記錯,在IE中使用document.selectionselection.createRange()來獲得當前選擇。

範圍對象上還有一個delete()collapse()刪除選定的文本。要插入跨度,您可以使用insertBefore()/insertAfter()或可能的range.pasteHTML()

+0

我至少需要Chrome和Firefox支持。 我按照你的解決方案,直到最後一步 - 如何插入跨度中間的感覺?如果我試圖改變整個範圍的大小,那麼這隻會起作用嗎?如果我的文字是這樣的: 這是一個無聊的句子其他文本 ,我只想做「森泰斯等」大小17pt字體怎麼會變成這樣的工作在你的解決方案? – Bryce 2010-09-02 18:52:03

+0

是的,我記得這是我給的方法的一個問題。爲了解決這個問題,我想我最終使用了selection.execCommand(「FontSize」,false,「3」)。在IE中,這創建了一個FONT元素(我知道有點狡猾)與一個HTML 1-7大小,而不是PT大小。 IE正確應用此新元素,以便在需要時在每個父元素內添加兩個FONT元素。然後我得到我當前選擇的元素(現在是一個FONT元素),刪除size屬性並用字體大小的樣式替換。不理想,但它適用於IE。 – Ash 2010-09-03 00:58:52

0

只有當您需要特殊許可時,CKEditor才850美元。只要您能尊重GPL,LGPL或MPL,您就可以在不購買任何東西的情況下使用它。http://ckeditor.com/license

0

使用CLEditor,您可以編寫一個簡單的插件,用點大小值(而不是字體大小1-7)替換內置字體彈出窗口。然後使用CLEditor .selectedText()和.execCommand()方法(以及「inserthtml」命令)將當前選擇替換爲包含選定文本的span標記。這將跨瀏覽器工作,將是非常輕量級的,不應該是那麼難寫。

+0

我考慮過這個,但如果用戶選擇了一些複雜的html,就像一個div的結尾和另一個div的開頭一樣,這將不起作用。 – Bryce 2010-09-04 17:23:40

+0

CLEditor版本1.2.4(剛剛發佈)現在包含一個.selectedHTML()方法,它可以解決您描述的問題。如果用戶有一個複雜的選擇,則返回的HTML字符串將包含正確的開始和結束標記。 – Chris 2010-09-05 18:36:01