如果我有<element id="blah" class="blah" attr="blah">
(编辑:我在DOM中没有其他元素,只有这个元素)
然后这些jQuery对象绝对等同于:
$("#blah")
$(".blah")
$("[attr=blah]")
是否在创建对象时执行查询,之后与使用的查询无关?
编辑:使用的原始查询是否会对我可能对生成的jQuery对象做的任何事情产生影响? 3个结果对象是否完全相同?它们是否与我使用的实际查询有任何持久影响? (例如,当我稍后对该对象做某事时)
答案 0 :(得分:2)
每个元素都可以获得元素,但是它们以不同的方式进行,因为它们是不同的选择器。
id选择器#
$("#blah")
这将返回一个带有 1 元素的jQuery对象(列出的元素)。使用id的好处是它只返回你的一个元素(如果存在),并且由于预期id是唯一的,因此速度最快。
班级选择器.
$('.blah')
这将返回一个jQuery对象,其中包含一个元素数组(包括您所拥有的元素),但也包含具有此类的任何其他元素。由于没有与此选择器的组合,它将比直接ID查找慢,因为它必须检查该类的页面上的每个元素。
属性选择器[]
$("[attr=blah]")
就像类选择器一样,这将返回一个元素数组。它还必须检查每个元素。
如果在使用jQuery函数调用时只有一个匹配项,则它们看起来可能相同。发生这种情况的原因是jQuery将查看是否存在匹配的元素数组,然后在集合内部使用$.each
来对它们应用jQuery函数调用。好处是,这使得元素集的响应非常类似于由jQuery对象包装的单个元素。
以下是jQuery支持的整个选择器列表:
http://api.jquery.com/category/selectors/
答案 1 :(得分:1)
该元素将匹配所有三个选择器,但它不会使三个选择器完全等效,因为它们都具有不同的匹配条件(一个查找ID,一个查找类名,一个查找任意属性) 。特别是,类和属性选择器可以返回多个元素,因为与ID选择器不同,它们并不意味着元素的唯一性。
即使你可以保证这个元素只是只有一个被所有三个选择器匹配的元素,每次调用$
总会产生一个唯一的jQuery对象,即使生成的jQuery对象也是如此封装相同的DOM元素。
答案 2 :(得分:0)
查询返回一个html元素数组。在此特定情况下,所有查询都返回相同的数组。原始查询无法在以后生效。