这实际上不是一个jQuery问题,但jQuery做了一些我希望能够用其他对象做的事情。
我注意到jQuery使用.length
属性返回元素的数量。但是,jQuery对象实际上并不是一个数组,所以元素的数量自然不可用。
我假设jQuery对象对实际元素使用数字键,因为[n]
返回其中一个。
添加或删除元素时,如何自动更新非数组的.length
属性?或者是在jQuery添加或删除元素时手动维护?
由于
答案 0 :(得分:2)
正如您所观察到的,jQuery对象实际上并不是一个数组。因此,.length
属性只是由任何可能实际更改DOM对象的类数组列表的内部内容的方法手动维护。
这对jQuery对象非常容易,因为很少有方法实际更改现有jQuery对象中的DOM对象列表。在jQuery对象中的DOM元素列表上运行的大多数jQuery方法(如.filter()
)实际上返回一个新的jQuery对象,并且不修改原始jQuery对象。
即使像.add()
或.slice()
这样的jQuery方法也不会修改现有的jQuery对象,而是返回一个新的jQuery对象,并在其中进行适当的修改。
如果您浏览jQuery源并查看如何创建许多jQuery对象,那么对给定jQuery对象进行操作的几乎所有方法都会通过.pushStack()
来调用jQuery.merge()
在新的jQuery对象上设置.length
属性。
如果查看主jQuery构造函数$(someSelector)
的代码,它会执行某种文档查询,构建类似于内部数组的DOM节点列表,然后手动设置.length
属性。
答案 1 :(得分:1)
手动维护。比较:
var l = [];
console.log(l.length); // 0
l[0] = 0;
console.log(l.length); // 1
var l = $([]);
console.log(l.length); // 0
l[0] = 0;
console.log(l.length); // 0