IE7 / 8的jQuery map()错误

时间:2011-06-16 12:37:35

标签: jquery internet-explorer 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:

        <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()函数时,错误消失了。我在这做什么冤枉?

1 个答案:

答案 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不支持。

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