我正在开发自定义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上执行这样的正则表达式操作容易出错,但是现在我假设用户正确选择文本!
答案 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");