2009-07-18 36 views
11

我有一些JavaScript基於用戶選擇的操作html。對於真正的瀏覽器,我使用槓桿的「範圍」的對象,方法得到這樣的:檢測JavaScript中的換行符的問題範圍對象

var sel = window.getSelection(); 
    var range = sel.getRangeAt(0); 
    var content = range.toString(); 

內容變量包含所有選定的文本,它工作正常。但是我發現我無法檢測到結果字符串中的換行符。例如:

選定的文本:

ABC

高清

GHI

range.toString()的計算結果爲 「ABCDEFGHI」。

對特殊字符的任何搜索都不會返回\ n \ f \ r或甚至\ s的實例。但是,如果我將變量寫入可編輯控件,則換行符會再次出現。

有誰知道我錯過了什麼?

這些選擇和操作在可編輯的div上可能是相關的。 Chrome,FireFox和Opera中也有相同的行爲。令人驚訝的是IE瀏覽器需要完全不同的代碼,但這裏沒有任何問題,除了它只是IE瀏覽器。

非常感謝。

+0

'range.toString()評價爲「abcdefghi」'是什麼意思?你用什麼來檢驗這個價值?調試器?警報()? – 2009-07-18 04:39:25

+0

你正在將`range`值寫入可編輯控件或`range.toString()`嗎? – RaYell 2009-07-18 04:48:36

回答

11

編輯我的帖子:

做實驗了一下,我發現sel.toString()回報新線CONTENTEDITABLE的div,而range.toString()返回正確的換行符在正常不可編輯的div但不可編輯的,因爲你的報道。

雖然找不到任何解釋。

這是一個有用的鏈接http://www.quirksmode.org/dom/range_intro.html

1

我發現至少兩種其他的方式,所以你仍然可以使用的範圍內找到在Mozilla插入符的位置。

的一種方法是調用

var documentFragment = rangeObj.cloneContents(); 

,其保持的childNodes的陣列,以及任何換行符將顯示爲類的節點「HTMLBRElement」。


另一種方法是確保每個「br」標籤後跟一個換行符(0x0a)!

這不會以任何可見的方式傷害HTML內容,但是現在當range.toString()被調用時,所有HTML中斷都會被轉換爲純文本換行符!


我希望這有助於 - 即使這個話題是非常古老的。 (我已經是死靈巫師了,呵呵):)