繁体   English   中英

javascript新手不理解数组

[英]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。 我的计划如下

  1. 创建一个名为divCounter的数组
  2. 通过ID Thing ##添加div
  3. 获取数组的长度
  4. 在由数组大小控制的for循环中,一次加载一个div,添加一些数据,移至下一个div,并添加更多数据,直到我没有div为止。

我显然不明白如何构建动态数组...(我不能静态地做到这一点,我不知道最终我将拥有多少东西## div)

我以为我可以做var divCounter = [document.getElementById("thing"+ * + *)]; 然后添加字符串(例如thing01Thing02 )。 但这是行不通的。 如何为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM