Что я тут делаю?
Вызов .toArray()
для объекта jQuery. Удалите эти вызовы и добавьте .get()
после .map()
, если вы хотите получить ванильный массив JS. Обратите внимание, что обратный вызов .map()
jQuery принимает 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 <9 - нет. </p>