であるためjQuery1.8
、 を使用$.parseHTML()
して要素を作成する方が適切です。
2 つの利点があります。
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>]