2009-12-15 59 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