2013-04-29 110 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