我正在尝试在方括号用于宏替换的环境中编写一些javascript,因此它们不能在脚本中正常使用。
如果我使用new Array()
创建一个数组作为对象,我可以使用push()和pop()来访问元素,但对于本机数组,我无法找到一种方法来获取元素使用括号。例如,从:
var allElements = document.getElementsByTagName("*");
有没有办法将一个原生数组分配到一个Array对象中,所以我可以使用push()和pop(),还是有另一种方法可以进入?
答案 0 :(得分:6)
是的,你可以使用prototype和slice方法(例如在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);
答案 1 :(得分:4)
对于NodeList
个集合,您可以使用.item()
:
var allElements = document.getElementsByTagName("*");
var firstItem = allElements.item(0);
来源:NodeList
答案 2 :(得分: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中运行良好。
答案 3 :(得分:2)
首先,JavaScript引擎会将文字转换为对象(它在幕后完成)
var arr = [1,2,3];
alert( arr.pop() );
其次,要了解document.getElementsByTagName()
的返回值不是数组。这是一个HTMLCollection。
答案 4 :(得分:1)
您可以定义一个插入[]大括号的宏。这可能是可能的。 : - )
但是,我想知道为什么你仍然使用这个环境 - 甚至记事本可能会更舒服。
答案 5 :(得分:-1)
for循环,你可以遍历集合,如
for(var item in array){
doStuff(item);
}
你也可以使用Jquery的makeArray函数
var newArray = $.makeArray(array);
我假设您在您的环境中别无选择方形括号在大量编程语言中是正常的。理想的解决方案是使用不限制编程的环境