我有以下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:
<td class="menubox">
<div class="draggable droppable lvl0">
<input type="hidden" value="-" />
LBL1
<div class="subs"></div>
</div>
<div class="draggable droppable lvl0">
<input type="hidden" value="-" />
LBL2
<div class="subs">
<div class="draggable droppable lvl1">
<input type="hidden" value="3" />
<b>LBL2.1</b><span style="display:block;"><a class="deleteItem">verwijder</a></span>
<div class="subs"></div>
</div>
<div class="draggable droppable lvl1">
<input type="hidden" value="6" />
<b>LBL2.2</b><span style="display:block;"><a class="deleteItem">verwijder</a></span>
<div class="subs"></div>
</div>
</div>
</div>
</td>
它在Chrome中工作正常,但IE会抛出错误:
错误:对象不支持此属性或方法
当我删除map()函数时,错误消失了。我在这做什么冤枉?
答案 0 :(得分:1)
我在这做什么冤屈?
在jQuery对象上调用.toArray()
。删除这些调用,并在.map()
之后添加.get()
,如果您想要使用vanilla JS数组。请注意,jQuery的.map()
回调需要index, element
,而Array.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&lt; 9不支持。