2009-12-15 47 views
1

我想在方括號用於宏替換的環境中編寫一些JavaScript,因此它們不能在腳本中用作正常腳本。不使用[]托架訪問Javascript陣列

如果我使用new Array()創建一個數組作爲對象,我可以使用push()和pop()來訪問元素,但對於本地數組,我無法找到一種方法來獲取元素而不使用括號。例如,從數組返回:

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

是否有本地陣列)分配到一個數組對象,所以我可以使用推()和pop(的方式,或者是有另一種方式進去?

+4

難道沒有辦法從宏觀環境中逃脫方括號嗎?這似乎是最簡單的方法。 – DMI 2009-12-15 19:07:39

+1

這些marco替代品將在哪裏?會在外部包含JavaScript文件? – Zoidberg 2009-12-15 19:07:55

+0

這是一個HTML報告生成器,它並不是專爲在此Javascript中進行黑客攻擊而設計的。我也發現它在我的RegExp的嘆息中用'〜'替換'|'。感謝大家的幫助! – ovinophile 2009-12-15 19:42:30

回答

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

投票下來? *真?*。嘆。 – 2009-12-15 19:20:47

+0

雖然它提供了準確的信息,但這個答案忽略了避免[]方括號的地方(因此在回答問題時似乎沒有用處)。 – 2009-12-15 19:23:18

+0

不,它不。我清楚地展示瞭如何在數組文字上使用數組對象方法。我只*還*注意到'document.getElementsByTagName()'的返回值不是一個數組,所以這些方法不會工作。 – 2009-12-15 19:26:01

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)); 
} 

得到任何伊特通過使用atIndex(allElements,0);

+0

非常好[5個字符] – Zoidberg 2009-12-15 19:21:53

+2

沒有去IE瀏覽器,對不起。 「錯誤:JScript對象預計」 – 2009-12-15 19:23:27

+0

廢話,將解決我的答案。 – nemisj 2009-12-15 19:29:02

-1

for循環M由您可以通過訪問集合類似
for(var item in array){
doStuff(item);
}

你也可以使用jQuery的makeArray功能
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創意思維! – 2009-12-15 22:54:55