|
Быстрый разбор списка элементов.
Всем мир.
На самом деле не надеюсь, что решение есть, но рискну спросить. Как преобразовать список элементов в строку или массив? Я пробовал так: var arr = Array.prototype.slice.call(document.getElementsByTagName('*')); и так: var arr = Array.prototype.join.call(document.getElementsByTagName('*')); и так: function test(){ var arr = Array.prototype.slice.call(arguments); } test.apply({}, document.getElementsByTagName('*')); Осел такие трюки не понимает. Как его проучить? И почему он arguments может преобразовать в массив, а список элементов и атрибутов нет? зы: хотя я подозреваю почему... arguments - объект JScript, а остальное объекты DOM. |
Скорее всего, никак:
http://javascript.ru/forum/events/41...kh-tehgov.html |
Цитата:
Цитата:
Цитата:
// Преобразует NodeList в Array // Реализация только для Standards Compliant Mode if (!Array.toArray) { try { // IE9 и все остальные браузеры поддерживают преобразование NodeList в массив при помощи slice. Array.prototype.slice.call(document.childNodes); // IE6–8 здесь выбросят исключение. Array.toArray = function (slice) { return function (anything) { return slice.call(anything); }; }(Array.prototype.slice); } catch (error) { Array.toArray = function (anything) { var length = anything.length, i = -1, array = []; if (length) { while (++i < length) { array[i] = anything[i]; } } return array; }; } } |
Многие браузеры тупое переписывание выполняют быстрее чем slice.call . Так-что смысла нет столько всего писать, достаточно просто:
Array.toArray = function $A(iterable) { if (iterable) { var result = [], i = iterable.length; while (i) result[--i] = iterable[i]; return result; } return []; }; |
Octane, я так и думал, что без цикла не обойтись.
Раз уж так все плохо, то я бы для ишака максимально оптимизировал код: Array.toArray = function (anything) { var l = anything.length; while (length--) { array[i] = anything[i]; } return array; }; Всем спасибо. |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Array.toArray = function(anything) { var array = []; for (var l = anything.length, l--; ) { array[i] = anything[i]; } return array; }; UPD Хотя нет, туплю, тут тоже лишняя перезапись есть :) |
просто как вариант...может так?
var r = document.getElementsByTagName("*"); Array.a = function (a) { var b = []; for (var c in a) if (typeof a[c] == "object") b[b.length] = a[c]; return b }; r = Array.a(r); ))) |
Часовой пояс GMT +3, время: 19:55. |
|