从textarea中的选择中删除封闭的html标记

时间:2013-04-29 20:32:22

标签: javascript jquery html regex

我正在开发自定义CMS,并且希望能够选择在textarea中显示以进行编辑的HTML部分,并将任何封闭的标签替换为另一个标签。例如,我可能想要选择一个段落元素,只需单击一下就可以将其转换为h3,不会触及任何其他标签。

我已经实现了rangyinputs以允许对textareas进行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上执行这样的正则表达式操作容易出错,但是现在我假设用户正确选择文本!

1 个答案:

答案 0 :(得分: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");