澄清jQuery“包装器”对象

时间:2011-04-20 01:59:00

标签: jquery javascript

我对jQuery核心有疑问。从文档和几本书我得到:

var obj = $("div");

使用其他方法返回包装器对象AKA所选DOM元素的集合。 (请随意纠正我可能说的错误)。我已经阅读了jQuery函数$()返回一个包装器对象,还是它真的返回了jQuery的副本以及包装元素的集合?

非常感谢任何帮助。

干杯

2 个答案:

答案 0 :(得分:6)

术语“包裹”对我来说有点误导。 jQuery将对提供的选择器匹配的元素的引用保持为调用返回的jQuery实例的数字属性,因此:

var allTheDivs = $('div');

返回一个jQuery对象,其中引用了文档中的所有div,并且:

allTheDivs[0];  // or allTheDivs['0'];

是对第一个的引用。所以,如果你这样做:

allTheDivs.hide();

它调用jQuery实例 allTheDivs hide 方法,该方法遍历所有引用的元素并隐藏它们。但不要尝试:

allTheDivs['0'].hide()

因为它会尝试在DOM元素上调用 hide ,这可能不会存在,因此会导致错误。

答案 1 :(得分:5)

它返回一个jQuery对象的实例,用你的CSS选择器包装你选择的元素(在这种情况下,一个jQuery对象包装文档中的所有div)。

jQuery不是“被复制”的东西 - 它是围绕DOM中元素的行为。

var jqDivs = $("div");
var jqButtons = $("button");
var jqSubmitButton = $("button#submit");

这3个变量引用了3个不同的对象。所有这些都实现了相同的jQuery行为,但是它们在不同的元素上实现。 jqDivs.hide()会隐藏div - jqButtons.hide()会隐藏按钮,而jqSubmitButton.hide()只会隐藏id = submit的按钮。