2011-12-17 29 views
0

我想寫一個比較$(element).text()和$(element).html()輸出的例程來確定html標籤的位置。這將稍後用於將格式化標記(如「strong」和「em」)應用於contenteditable,而不使用document.execCommand()。哪些必要的字符轉換爲html實體?

此時我意識到要進行比較工作,需要將$(element).text()輸出中的'>','<'和'&'等字符轉換爲它們各自的html實體。從firebug我看到這些字符自動轉換爲innerHTML屬性。我嘗試過其他角色。如引號和元音變音,並且這些不會被轉換。

我的問題是:

  1. 是否有字符的基本集(我的猜測是>,<,並&)是那些獲得跨瀏覽器的一致性轉換?我的目標瀏覽器是Firefox和Chrome,不需要IE瀏覽器,謝天謝地。

  2. 這組字符是由jQuery的.html()方法所尊重的,還是jQuery自己做的事情來平衡跨瀏覽器的差異。如果是這樣,我在哪裏可以找到jQuery轉換爲實體的基本字符的完整列表?

進一步澄清:

如果在CONTENTEDITABLE我有這樣的文字段落手動輸入:

some text, and some characters >, <, ", &, ', ë 

$('p').text()會給我:

some text, and some characters >, <, ", &, ', ë 

$('p').html()會給我:

some text, and some characters &gt;, &lt;, ", &amp;, ', ë 

這也是我在firebug和chrome開發人員工具中看到的結果。

<,>和&顯然是必不可少的整個事情的工作,而報價和特殊字符不是。

我想通過查找/全部替換來轉換$('p').text()的結果,以便匹配$('p').html()的輸出,減去標籤本身。

我需要知道除明顯的<,>和&之外的其他字符需要轉換爲html實體纔能有完美匹配。

這是什麼:

我想建立一個CONTENTEDITABLE DIV簡單WYSIWYM編輯,而不訴諸現有WYMEditor它帶有內嵌框架。

這將用於受控環境(我的自定義cms),並將允許在HTML編輯器中預期的功能的子集。基本上整個事情是一堆P,H1-H6,和UL> LI,OL> LI標籤位於contenteditable div。

內容標籤(沒有UL或OL兒童的P,H1-H6和LI標籤)只能包含STRONG,EM,A,SUB,SUP和SPAN標籤。

我沒有針對IE瀏覽器,但希望在FF和Chrome中運行,而且沒有平臺差異。這些平臺差異之一是在加粗或斜體文本時執行document.execCommand()的方式。 FF在使用標籤時包裝選擇。我決定使用以下方式應用格式:

  1. 獲取選擇範圍。
  2. 列出範圍內的所有「內容標籤」。
  3. 使用範圍對象及其與每個「內容標記」的關係我定義了三個文本塊:選擇之前,選擇和之後。這些都是直接的文字,沒有轉換爲實體的特殊字符。
  4. 對於每個「內容標籤」innerhtml,我逐個字符地解析分解成每種標籤的「地圖」。我建立了一個標籤層次結構:a> span> sub> sup> em> em。該「地圖」將是這樣的:

爲innerHTML的:this <em>is <strong>a</strong></em> <a href="#"><strong>test</strong>文本

text: this is a test text 
    a: __________XXXXXXXXX 
strong: ________X_XXXX_____ 
    em: _____XXXX__________ 
  1. 使用選擇之前,選擇和選擇文本之後,以及格式化操作,然後我創建一個面具。舉例來說,如果「這是」需要被加粗:面膜是:
text: this is a test text 
strong: XXXXXXX____________ 
  1. 面具與地圖相結合後,生成的地圖是:
text: this is a test text 
    a: __________XXXXXXXXX 
strong: XXXXXXX_X_XXXX_____ 
    em: _____XXXX__________ 
  1. 此地圖被轉換爲HTML:
<strong>this <em>is</em></strong><em> </em><strong><em>a</em></strong> <a href="#"><strong>test</strong> 
  1. 取代 「容器標籤」 的與所得到的HTML的innerHTML。

現在我問這個問題的原因是我需要從html中提取的文本塊和由範圍給我的文本完美匹配。所以我不能轉換任何特殊字符,只能轉換「必要」字符。

我知道這可能不是最簡單或最快的方式去解決這個問題,但我是一個視覺思想家,並以某種方式在2維網格中佈局問題大大有所幫助。

回答

1

我不清楚你在嘗試什麼,並在這裏問。

現在我所能說的是:是的,<>&(也'"如果使用與他們援引屬性中)進行,如果寫入.html()/.innerHTML逃脫。他們不需要需要在所有情況下都可以逃脫,但始終這樣做絕對沒有錯。

如果您需要更全面的答案,您需要更具體(例如使用代碼示例)。

編輯:

我仍然不知道如果我理解你想要達到的目的。您是否試圖擺脫您的p元素中的任何HTML元素(標籤)?然後你只可以設置閱讀文本並設置回:

$("p").text($("p").text()); 

或者,如果你只需要轉換成任何問題的字符,你可以使用一個「unanonymous」元素,設置它的text的文字你想Ø轉換並閱讀它.html()

alert($("<div>").text("some text, and some characters >, <, \", &, ', ë").html()); 
+0

謝謝你的回答,我已經更新了問題,並進一步澄清。我沒有任何相關的代碼。 – Andri

+0

到目前爲止,只有<, >和&字符似乎是必不可少的。接受 – Andri

+0

@Andri:查看我的更新。 – RoToRa

相關問題