澄清jQuery"包装器"对象

max*_*mus 3 javascript jquery

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

var obj = $("div");
Run Code Online (Sandbox Code Playgroud)

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

任何帮助是极大的赞赏.

干杯

Rob*_*obG 6

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

var allTheDivs = $('div');
Run Code Online (Sandbox Code Playgroud)

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

allTheDivs[0];  // or allTheDivs['0'];
Run Code Online (Sandbox Code Playgroud)

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

allTheDivs.hide();
Run Code Online (Sandbox Code Playgroud)

它调用jQuery实例allTheDivshide方法,它循环遍历所有引用的元素并隐藏它们.但不要尝试:

allTheDivs['0'].hide()
Run Code Online (Sandbox Code Playgroud)

因为那会尝试在DOM元素上调用hide,这可能不会存在,因此会在错误中恢复.


Gle*_*ett 5

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

jQuery不是"复制"的东西 - 它是围绕DOM中的元素的行为.

var jqDivs = $("div");
var jqButtons = $("button");
var jqSubmitButton = $("button#submit");
Run Code Online (Sandbox Code Playgroud)

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