IE7 / 8的jQuery map()错误

我有以下jquery代码:

$('.menubox').children('div').toArray().map(function(n,i){ return [$(n).children('input').val(),$(n).children('.subs').children('div').toArray().map(function(n,i){ return [$(n).children('input').val(),$(n).children('.subs').children('div').toArray().map(function(n,i){ return $(n).children('input').val(); })]; })]; }); 

这是与之相关的HTML:

   
LBL1
LBL2
LBL2.1verwijder
LBL2.2verwijder

它在chrome中工作正常,但是IE会抛出一个错误:

错误:对象不支持此属性或方法

当我删除map()函数时,错误消失了。 我在这做什么冤枉?

我在这做什么冤枉?

在jQuery对象上调用.toArray() 。 删除这些调用,并在.map() .get()之后添加.get() ,如果你想得到一个vanilla JS数组。 请注意,jQuery的.map()回调接受index, elementArray.map的回调接受element, index因此您还需要交换参数名称。

 var results = $('.menubox').children('div').map(function(i, n) { return [ $(n).children('input').val(), $(n).children('.subs').children('div').map(function(i, n) { return [ $(n).children('input').val(), $(n).children('.subs').children('div').map(function(i, n) { return $(n).children('input').val(); }).get() ]; }).get() ]; }).get(); console.log(JSON.stringify(results)); // ["-",[],"-",["3",[],"6",[]]] 

这适用于Chrome但不支持IE,因为Chrome支持Array.map()但(惊喜,惊喜)IE <9不支持。

演示: http : //jsfiddle.net/mattball/5KBdA/