2013-04-29 86 views
0

我正在處理自定義的CMS,並希望能夠選擇一段HTML顯示在textarea中進行編輯,並用另一個標籤替換任何封閉標籤。例如,我可能希望選擇一個段落元素並將其變成一個h3,只需點擊一下,就可以保持其他任何標籤不變。刪除從textarea中選擇封閉的html標籤

我已經實現rangyinputs允許在文字區域getSelection /使用replaceSelectedText操作,到目前爲止,我有這樣的:

function add_html_tag(target_ID, replace_tag) { 
    $(target_ID).focus(); 
    $(target_ID).replaceSelectedText('<' + replace_tag + '>' + $(target_ID).getSelection().text.replace(/(<([^>]+)>)/ig,"") + '</' + replace_tag + '>'); 
} 

這工作正常,但它從目標文本中刪除所有標籤,不只是封閉的人如此所選文本中的任何其他標籤也將被刪除。

任何想法,我認爲它只會涉及更改替換語句中的正則表達式。由於textarea只包含純文本,所以我不能使用jQuery方法,比如unwrap。很明顯,在HTML上做這樣的正則表達式操作是容易出錯的,但現在我會假定用戶正確選擇文本!

+0

您應該不使用正則表達式來解析HTML。看到這篇文章[這裏](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags?rq=1)。 – Walls 2013-04-29 20:44:25

回答

0

此演示將「A」標籤變成「LINK」標籤;無效,但顯示您描述的功能:

function add_html_tag(target_ID, replace_tag, new_tag_name) { 
    var elm=$("#"+target_ID).focus()[0]; 
    elm.value=elm.value.replace( new RegExp("<(\\\/?)"+replace_tag+"\\b", "gi"), "<$1"+new_tag_name); 
} 

add_html_tag(textAreaID, "a", "link"); 
+0

關閉,但有沒有更改我的代碼的方法,以便只有封閉標籤 - 無論它們 - 受到影響? – 2013-04-29 23:33:53