[英]New to javascript don't understand arrays
好的,我有一个简单的HTML文档:
<head>
</head>
<body>
<div id="notInvolved"> This div is static</div>
<div id="thing01"></div>
<div id="thing02"></div>
<div id="thing03"></div>
</body>
我想使用外部JavaScript来操作div。 我的计划如下
我显然不明白如何构建动态数组...(我不能静态地做到这一点,我不知道最终我将拥有多少东西## div)
我以为我可以做var divCounter = [document.getElementById("thing"+ * + *)];
然后添加字符串(例如thing01
, Thing02
)。 但这是行不通的。 如何为getElementById
设置通配符? 如果不能,怎么办?
有没有办法做到这一点,还是我吠错了树? 我讨厌成为新手。
一般来讲(因为您提供的代码很少),当事物是唯一的时,应该使用ID;当需要分组访问事物时,应使用类。 做这样的事情更有意义:
<body>
<div id="notInvolved"> This div is static</div>
<div id="thing01" class="affected"></div>
<div id="thing02" class="affected"></div>
<div id="thing03" class="affected"></div>
</body>
一旦有了将它们组合在一起的东西,就可以使用document.getElementsByClassName('affected')
来检索它们。 这比尝试使用for
循环或其他某种构造来检索单个元素要有意义得多。
您可以使用通配符选择页面上的所有元素,然后使用正则表达式过滤元素。
var all =document.getElementsByTagName('*');
var r = /^thing\d+$/;
var test = function(el){
return r.test( el.getAttribute('id'));
}
var elements = [];
for(var i=0,l=all.length;i<l;i++)
If(test(all[i]))
elements.push(all[i]);
您应该在要修改的动态div上使用类,然后遍历getElementsByClassName的结果:
var dynamicDivs = document.getElementsByClassName('dynamic');
for (var i = 0; i < dynamicDivs.length; i++) {
// do whatever you want with dynamicDivs[i]
}
我不完全了解您要完成的工作。 无论如何,要让您了解如何仅在其ID以字符串“ thing”开头的情况下向数组添加元素,这是一个简单示例,说明如何使用for循环,getElementByTagName函数以及如何使用访问DOM元素的属性。 您真正想做的事情(将元素添加到数组中)是使用divCounter数组的push方法完成的。
var everyDiv = document.getElementsByTagName('div');
var divCounter = [];
for( var i = 0; i < everyDiv.length; i++ ){
var currentDiv = everyDiv[i];
var currentID = currentDiv.id;
if (currentID != null && currentID.indexOf('thing') == 0){
divCounter.push(currentDiv);
};
}
var res = divCounter.length;
当然,这是为了清楚起见,我会从另一个角度来解决这个问题,并且会以更简洁的方式对其进行编码。 我同意其他答案:这些div之间共享一个类是选择这些元素的最佳方法。 一个相同的(具有相同的程序性方法)示例是:
var everyDiv = document.getElementsByTagName('div'),
divCounter = [],
i, currentID;
for( i = 0; i < everyDiv.length; i++ ){
currentID = everyDiv[i].id;
if ( currentID && currentID.indexOf('thing') == 0){
divCounter.push(everyDiv[i]);
};
}
这是完全一样的,只是在开头声明了变量。 因为在JavaScript中变量的范围是函数而不是代码块,所以理想的情况是在开始时使用单个“ var”声明来启动函数。
function load() {
var divTags = document.getElementsByTagName("div");
var divArray = new Array();
var j = 0;
for(i = 0; i < divTags.length; i++) {
if(divTags[i].id.substr(0,5) == "thing") {
divArray[j++] = divTags[i].id;
}
}
for(i = 0;i < divArray.length; i++)
alert(divArray[i]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.