我正在使用jQuery从输入文本字段中删除不需要的html标记。这很好,但是,当一个特殊字符作为html实体输入时,例如™
(我想允许)我在创建DOM时会出现以下错误:
语法错误,无法识别的表达式:...
™
我们的想法是从文本字段中获取html字符串;从中创建一个DOM元素;然后,只删除不需要的标签。
数据如:<span>My <b>company</b></span>
被清理为My <b>company</b>
...我期待。
但输入的数据如:My <b>company</b> ™
中断
var s = jQuery(this).find('#new-topic').val();
var $s = jQuery(s); //this is where the error occurs
var $elements = $s.find("*").not("b, strong"); //get elements that are not <b> or <strong>
for (var i = $elements.length - 1; i >= 0; i--) {
var e = $elements[i];
jQuery(e).replaceWith(e.innerHTML);
}
var finalInput = $s.html();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="new-topic" type="text">
&#13;
在这种情况下,是否允许使用特殊字符?
答案 0 :(得分:0)
当从文本字段捕获的字符串未包含在标记中时,实际上会引起该问题;例如://exception here
//Uncaught TypeError: Cannot read property 'on' of undefined
me.items[0].on('select', onSiRemoteCombo, this);
但是My <b>company</b> ™
确实有效。如果没有在文本字段中输入标签,这也会产生一些不良行为:<span>My <b>company</b> ™</span>
。为了解决这个问题,我在创建DOM元素之前总是将字符串包装在标记中:My company
s = '<test>'+s+'</test>';
&#13;
jQuery('#remove-unwanted-tags').on('click', function() {
var s = jQuery('#new-topic').val();
console.log('Before removing unwanted tags: ' + s);
s = '<test>' + s + '</test>'; //added fix
var $s = jQuery(s); //this is where the error occurs
var $elements = $s.find("*").not("b, strong"); //get elements that are not <b> or <strong>
for (var i = $elements.length - 1; i >= 0; i--) {
var e = $elements[i];
jQuery(e).replaceWith(e.innerHTML);
}
var finalInput = $s.html();
console.log('After removing unwanted tags: ' + finalInput);
});
&#13;
不确定这是否是清除不需要的标签的最佳方法,但至少它是有效的。