最近,我一直在努力提高性能(有时它有助于提高可维护性)
var objectToReference = $('div .complicated #selector ul:last');
那么objectToReference
真正拥有什么?有时事情会让我感到困惑,所以我又回到使用完整的选择器,它已经有效了。
变量保持引用,指针等等(我不确定这些术语的确切定义)
由于
答案 0 :(得分:20)
许多人在创建这样的变量时使用的最佳做法是以$开头命名,以表明它是一个jquery对象。所以你可以命名变量$ o,你可以在它之后直接调用其他jQuery链函数,而不必在变量周围放置$()。
$o.hide();
最好从您操作区域的周围元素开始,以避免必须搜索整个文档。例如,要获取文档的单个部分中的所有链接(无需搜索整个文档):
var $o = $('#mysection');
var $links = $('a', $o); // equiv to $o.find('a')
最后,通过jQuery传递jQuery对象永远不会伤害:
$o === $($o)
这有一个很好的副作用 - 你可以编写一个接受以下任何一个参数的函数:一个选择器,一个元素或一个jQuery对象:
function myFunc(e) {
var $e = $(e);
}
// All of the following will work:
myFunc('#mysection');
myFunc(document.getElementById('mysection'));
myFunc($('#mysection a'));
答案 1 :(得分:3)
jQuery selector 的返回值是jQuery元素的数组。如果选择器找不到任何匹配项,则它包含一个包含0个元素的数组。
数组中的每个元素本质上是对HTML文档中匹配DOM元素的引用。这使您可以根据需要遍历和操作它们。
答案 2 :(得分:1)
它包含一个jQuery集合,它是一个数组。如果DOM改变了你,你可能会遇到麻烦。
进一步查看它,发现集合(你可以像数组一样对待)是一个具有类似数组属性的对象。
http://www.learningjquery.com/2008/12/peeling-away-the-jquery-wrapper-and-finding-an-array
请记住,数组和对象在JavaScript中非常相似。有关更多信息,请参阅我的Kirk & Cheesecake post。
答案 3 :(得分:1)
它包含对返回的jQuery对象的引用。对象的任何更改都会更改底层DOM元素以及对同一元素的所有其他引用。
$('div .complicated #selector ul:last')
您的变量objectToReference
将是一个jQuery对象,您可以对其执行jQuery操作。此外,即使您不必,也可以使用objectToReference
创建一个新的jQuery对象,该对象不应该施加任何性能限制,因为它应该只返回对自身的引用而不是重新搜索那个元素。
var objectToReference = $('div .complicated #selector ul:last');
var copyOfObject = $(objectToReference);
您可能通过尝试引用objectToReference
的DOM属性而遇到问题。如果你想获得jQuery选择器返回的objectToReference
的底层DOM元素,你可以这样做:
var objectToReference = $('div .complicated #selector ul:last');
var domOfObject = objectToReference.get(0);
或者可选地,你可以这样做,它在1行中做同样的事情:
var domObjectToReference= $('div .complicated #selector ul:last').get(0);
同样,您可以使用jQuery构造函数中的domObjectToReference
来创建对该对象的另一个引用:
var objectToReference2 = $(domObjectToReference);
所有这些示例都存储对DOM元素的引用。如果您修改其中一个引用的值,它们将被修改/更新。
答案 4 :(得分:0)
对于任何有兴趣的人我已经发布了一个jQuery引用的V2,如果你想看看它在这里:http://www.skidoosh.co.uk/jquery/jquery-selectors-and-attribute-selectors-reference-and-examples-v2/对于jQuery 1.2我将在几天内将它更新为1.3。< / p>