我有一段我最理解的代码。我唯一不了解的是Array.prototype.slice.call在这个实例中是如何工作的。
var getElementsByClassName = function(className){
var elements = $('*').filter(function(index, node){
// this will basically iterate through all nodes on the
// DOM and check to see which node matches the className passed in.
return $(node).hasClass(className);
});
// elements is an array of two elements. array[0] seems to be the non-enumerable
// properties (but it has a length property?) and the other is the element on the dom.
// the usage below slices out array[0] and returns array[1], but since both
// have a length property and numeric indices, why doesn't this usage return
// both items?
return Array.prototype.slice.call(elements);
};
我已将评论/问题留在了线上。任何帮助将不胜感激:)。
谢谢, 乙
答案 0 :(得分:1)
您的代码构建了一个jQuery对象,该对象仅包含具有搜索类的DOM节点。对.slice()
的调用只是复制了它。只是
return elements.get();
会做同样的事情。 (当然,$("." + className)
将取代整个事物。)
jQuery对象不是数组。它们是模仿数组,而.slice()
方法并不挑剔;只要它正在处理的对象有一个length
方法和数字索引属性(jQuery对象都有),就可以了。