有$(document).find('selector')和$('selector')的区别

Ole*_*ral 8 jquery

我已经开始研究一些项目,在代码中我找到了$(document).find('selector')和$('selector')的组合.我找不到为什么这样做的真正原因.我这两者之间是否存在显着差异,以便在项目中同时使用它们?在某些情况下我应该先选择一个吗?

T.J*_*der 13

$(document).find("selector")并且$("selector")将匹配相同的一组元素.

没有理由使用$(document).find("selector")just $("selector")(除非您使用的选择器来自不受信任的来源 - 稍后会更多关注),以及几个原因:

  1. 写入时间更长,阅读起来更尴尬,使脚本大小膨胀

  2. 它导致更多的内存流失(更多临时对象被创建/销毁)

  3. 它的速度较慢- http://jsperf.com/vs-document-find,http://jsperf.com/selector-vs-find-again

在此输入图像描述

但是,如果你有$(selector)其中selector来自不受信任的来源是,提防jQuery的嗅着字符串,要么做一个选择创建新的HTML元素.也就是说,$("div")寻找divs但$("<div>") 创建一个div.如果您使用的文本来自不受信任的来源,则可能是<script src='http://example.com/path/to/malicious/script.js>.现在,本身不会有问题,但如果将结果script元素添加到文档中(例如$(selector).appendTo(document.body)),则突然它是一个XSS攻击向量.可能性有多大?不,如果你选择的话就不太可能随后追加(尽管你可能会,如果你正在移动元素).但是,如果选择器来自不受信任的源,则$(document).find(selector)确保文本仅用作选择器,而不是HTML字符串.或者,在现代浏览器上,$(document.querySelectorAll(selector))(但你不能以这种方式使用jQuery对选择器的扩展).