2009-12-15 3 views
1

Я пытаюсь написать некоторый javascript в среде, где квадратные скобки используются для замены макросов, поэтому они не могут использоваться как обычно в скрипте.Доступ к массиву Javascript без использования [] Кронштейны

Если я создаю массив как объект с new Array(), я могу использовать push() и pop() для доступа к элементам, но для собственных массивов я не могу найти способ добраться до элементов без использования скобок. Например, массив, возвращаемый из:

var allElements = document.getElementsByTagName("*"); 

Есть ли способ, чтобы назначить родной массив в объект Array, так что я могу использовать толчок() и поп(), или есть другой способ, чтобы попасть внутрь?

+4

Не существует способа избежать квадратных скобок из макросъемки? Это похоже на самый простой способ. – DMI

+1

Где будут эти замены marco?Будет ли внутри внешних файлов javascript? – Zoidberg

+0

Это для генератора отчетов HTML, который действительно не был предназначен для взлома в этом Javascript. Я также обнаружил, что он заменяет '|' '' 'в моем RegExp's sigh. Спасибо всем за помощь! – ovinophile

ответ

4

Для NodeList коллекций вы можете использовать .item():

var allElements = document.getElementsByTagName("*"); 
var firstItem = allElements.item(0); 

Источник: NodeList

1

Вы можете определить макрос, который вставляет [] скобки. Это может быть возможно. :-)

Тем не менее, мне интересно, почему вы все еще используете эту среду - даже Блокнот может быть более удобным тогда.

2

Прежде всего, двигатель JavaScript преобразует литералы объектов для вас (он делает это за кулисами)

var arr = [1,2,3]; 
alert(arr.pop()); 

Во-вторых, понять, что возвращаемое значение из document.getElementsByTagName()не массив. Это HTMLCollection.

+0

Проголосовали? *В самом деле?*. Вздох. –

+0

Хотя он предоставляет точную информацию, этот ответ пропускает точку, позволяющую избежать [] скобок (и поэтому не кажется полезным при ответе на вопрос). –

+0

Нет, это не так. Я ясно показал, как вы можете использовать методы объекта массива для литералов массива. Я просто * также * отметил, что возвращаемое значение 'document.getElementsByTagName()' не является массивом, поэтому эти методы не будут работать в любом случае. –

6

да, вы можете использовать прототип и метод срезов, например (не работает в IE):

var index = 1; 
Array.prototype.slice.call(allElements,index,index+1); 

Для IE, единственный способ, которым я могу думать о том, чтобы скопировать все элементы из коллекции в массив :

var newarr = new Array(); 
for(var i=0;i<allElements.length;i++){ 
    newarr.push(allElements[i]); 
} 

Или, вы можете использовать эту функцию (работает в IE и Firefox):

window.atIndex = function(array,index){ 
    return eval("array" + String.fromCharCode(91) + String(index) + String.fromCharCode(93)); 
} 

Получить любую ITE м с помощью atIndex(allElements,0);

+0

Очень симпатичный [5 символов] – Zoidberg

+2

Не идите в IE, извините. «Ошибка: ожидаемый объект JScript» –

+0

Crap, исправит мой ответ. – nemisj

-1

для петель вы можете перебирать коллекцию как
for(var item in array){
doStuff(item);
}

Вы можете также использовать функцию makeArray Jquery в
var newArray = $.makeArray(array);

Я предполагаю, что у вас нет выбора в вашей среде площади брекеты - обычная вещь в тоннах языков программирования. Идеальное решение использовать среду, которая не ограничивает программирование

3
arr = [1, 2, 3]; //just a dummy array, I assume you don't use square brackets to assign an array in your code 
el0 = arr.slice(0,1).pop(); //returns 0th element 
el1 = arr.slice(1,2).pop(); //returns 1st element 
... 

Не имею IE здесь, но он отлично работает в Firefox.

+0

+1 для творческого мышления! –

Смежные вопросы