使用jQuery转义文本追加?
我知道我可以使用$.html
来设置某些内容的HTML内容,并使用$.text
来设置内容(并且这会转义HTML)。
不幸的是,我正在使用$.append
,它不会逃避HTML。
我有这样的事情:
function onTimer() { $.getJSON(url, function(data) { $.each(data, function(i, item) { $('#messages').append(item); } } }
… url返回一个字符串数组。 不幸的是,如果其中一个字符串是(例如) alert('Hello')
,则会执行此操作。
如何让它逃脱HTML?
看看jQuery是如何做到的:
text: function( text ) { if ( typeof text !== "object" && text != null ) return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); var ret = ""; jQuery.each( text || this, function(){ jQuery.each( this.childNodes, function(){ if ( this.nodeType != 8 ) ret += this.nodeType != 1 ? this.nodeValue : jQuery.fn.text( [ this ] ); }); }); return ret; },
所以这样的事情应该这样做:
$('#mydiv').append( document.createTextNode('Hey There!') );
编辑 :关于你的例子,它很简单:
$('#messages').append(document.createTextNode(item));
您是否附加了已有内容的元素? 或者您在追加后添加内容? 无论哪种方式,您仍然需要对该元素执行.text(…)。
如果你使用append并传递HTML作为参数,那么首先尝试创建元素,然后将其传递给append。
例如:
$('').text('your content here').appendTo('div#someid')
如果你真的想让jQuery将一些文本转义为HTML片段并且不希望自己直接触摸document
,那么下面的纯jQuery可以为你将文本转换为HTML(但仅限于HTML上下文中):
jQuery('').text('v & M_FLAG == M_FLAG').html()
这可用于非常低效地附加文本:
jQuery('#message').append(jQuery('').text(item).html());
将不会插入额外的
元素,因为.html()
返回元素的HTML格式内容,不包括元素本身。
基于jQuery缺乏实例化文本节点的内置方法,我认为jQuery的作者希望用户直接使用document.createTextNode()
,如前面的答案中所示。