这可以用更简洁的方式完成吗?
var src = $('div'); var dest = []; for ( var i = 0; i < src.length; i++) dest[i] = $(src[i]);
我只能想到这一点,这仍然非常冗长:
var dest = []; $('div').each(function() { dest.push($(this)); });
jQuery是否为这种情况提供了更好的东西?我找不到它.
src[i]
is already a jQuery object,callingjQuery(src[i])
doesn’t do anything.
不,它是一个普通的DOM节点,根本没有任何jQuery包装.
Just out of curiosity,why do it at all?
因为之后我需要分别对每个元素做很多事情.例如,我需要遍历所有这些以找到最高的那个,然后将其余部分设置为相同的高度.之后,我需要获得所有宽度并基于此进行一些布局(因此每个元素根据其他元素的宽度获得其x& y坐标).等等.
如果我可以使用jQuery提供的速记函数,所有这些操作都更容易完成,但这意味着我需要单独包装每个元素($(‘div’)只返回所有这些元素的包装).因为我需要多次访问每个元素,所以我想通过将每个元素包装一次而不是每次访问来提高性能.
解决方法
这正是map()的用途.
您循环遍历每个元素并将一个函数应用于该元素并将其推送到一个新的数组.
您循环遍历每个元素并将一个函数应用于该元素并将其推送到一个新的数组.
var wrapped = $.map($('div'),function(){ return $(this); });
或者为了可读性
var wrapped = $.map($('div'),function(val,i) { return $(val); });