因为jQuery1.8
,使用$.parseHTML()
来创建元素是更好的选择。
有两个好处:
1.如果您使用旧方式,可能类似于$(string)
,jQuery 将检查字符串以确保您要选择一个 html 标签或创建一个新元素。通过使用$.parseHTML()
,您可以明确地告诉 jQuery 您要创建一个新元素,因此性能可能会好一些。
2.更重要的是,如果您使用旧方式,您可能会遭受跨站点攻击(更多信息)。如果你有类似的东西:
var userInput = window.prompt("please enter selector");
$(userInput).hide();
一个坏人可以输入<script src="xss-attach.js"></script>
来逗你。幸运的是,$.parseHTML()
避免你的尴尬:
var a = $('<div>')
// a is [<div></div>]
var b = $.parseHTML('<div>')
// b is [<div></div>]
$('<script src="xss-attach.js"></script>')
// jQuery returns [<script src="xss-attach.js"></script>]
$.parseHTML('<script src="xss-attach.js"></script>')
// jQuery returns []
但是,请注意它a
是一个 jQuery 对象,而它b
是一个 html 元素:
a.html('123')
// [<div>123</div>]
b.html('123')
// TypeError: Object [object HTMLDivElement] has no method 'html'
$(b).html('123')
// [<div>123</div>]