2013-04-29 9 views
0

Я работаю над пользовательской CMS и хочу иметь возможность выбирать раздел HTML, отображаемый для редактирования в текстовом поле, и заменять любые закрывающие теги другим тегом. Например, я могу выбрать элемент абзаца и превратить его в h3 одним щелчком мыши, оставив любые другие теги нетронутыми.Удалить теги html из выделения в textarea

Я реализовал 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 + '>'); 
} 

Это хорошо работает, но он удаляет все теги из целевого текста, а не только ограждающие те, так любые другие теги в выбранном тексте также будут удалены.

Любые идеи, я думаю, что это просто связано с изменением регулярного выражения в выражении replace. Поскольку textarea содержит только обычный текст, я не могу использовать методы jQuery, такие как распаковка. Очевидно, что выполнение регулярных операций, подобных этому на HTML, является подверженным ошибкам, но на данный момент я предполагаю, что пользователи правильно выбирают текст!

+0

Возможно, вы не должны использовать Regex для анализа HTML. См. Этот пост [здесь] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags?rq=1). – Walls

ответ

0

это демо превращает теги «A» в теги «LINK»; invalid, но показывает функциональность, которую вы описываете:

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

Закрыть, но есть ли способ изменить мой код, чтобы затронуть только те теги, в которых они находятся, - что бы они ни были? –

Смежные вопросы