关于变量和选择器的jQuery问题

时间:2009-06-02 01:40:11

标签: javascript jquery

最近,我一直在努力提高性能(有时它有助于提高可维护性)

var objectToReference = $('div .complicated #selector ul:last');

那么objectToReference真正拥有什么?有时事情会让我感到困惑,所以我又回到使用完整的选择器,它已经有效了。

变量保持引用,指针等等(我不确定这些术语的确切定义)

由于

5 个答案:

答案 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>