当前位置: 首页 > 面试题库 >

javascript循环仅适用于所有其他元素

麻华辉
2023-03-14
问题内容

完成ajax查询后,我在下面有以下javascript

我所有的图像都有名称=“ pic”

<script type="text/javascript">
 function done() {
     var e = document.getElementsByName("pic");
     alert(e.length);
     for (var i = 0; i < e.length; i++) {
         cvi_instant.add(e[i], { shadow: 75, shade: 10 });
     }
 }

我的目标是在使用此库的周围应用图像边框:

http://www.netzgesta.de/instant/

问题在于,由于某种原因,这可行,但似乎仅适用于其他所有图片,而不是其他所有图片。任何线索为什么上面的代码会跳过其他所有元素?

编辑:我在循环中添加了一个警报,它确实正确地转到0,1,2,3,4,5,6。 。

     for (var i = 0; i < e.length; i++)
     {
         alert(i);
         cvi_instant.add(e[i], { shadow: 75, shade: 10 });
     }

问题答案:

它似乎只适用于其他所有图片,而不是所有其他图片

这是破坏性迭代的经典标志。

考虑一下,如果我猜该函数cvi_instant.addpic其他一个或多个其他元素替换命名的元素,会发生什么情况。

getElementsByName返回一个“活动的”
NodeList:每次您对DOM进行更改时,它都会保持最新状态。因此,如果它之前有五个元素,则在调用cvi_instant.add它之后现在仅包含四个元素:第一个节点消失了,而节点1-4已向下移动到位置0-3。

现在,您再次循环。i++,所以我们看的是元素1。但是元素1现在原来是元素2!我们跳过了原始元素1,然后将继续跳过所有其他元素,直到到达列表的末尾(现在是长度的一半)。

在迭代列表的同时更改列表会导致这种问题。如果迭代中的过程实际上 元素 添加 到列表中,您甚至可以得到无限循环!

快速解决方案是向后迭代循环。现在,您首先执行最后一个元素,将所有其他元素保留在其原始位置,并且不会跳过:

 var e= document.getElementsByName("pic");
 for (var i= e.length; i-->0;) {
     cvi_instant.add(e[i], { shadow: 75, shade: 10 });
 }

如果您 知道 总是要在每次调用的列表中删除元素,则另一个简单的解决方案是:

 var e= document.getElementsByName("pic");
 while (e.length>0) {
     cvi_instant.add(e[0], { shadow: 75, shade: 10 });
 }

当循环主体可以对列表执行 任何操作时
,例如插入pic在文档开头命名的新元素或从中间删除其他元素,则需要最通用的解决方案。稍稍慢一些,但可以安全地创建列表的静态副本以进行操作:

 function Array_fromList(l) {
     var a= [];
     for (var i= 0; i<l.length; i++)
         a.push(l[i]);
     return a;
 }

 var e= Array_fromList(document.getElementsByName("pic"));
 for (var i= 0; i<e.length; i++) {
     cvi_instant.add(e[i], { shadow: 75, shade: 10 });
 }


 类似资料:
  • 问题内容: 我觉得我花了很多时间用Python编写代码,但没有足够的时间来创建Pythonic代码。最近,我遇到了一个有趣的小问题,我认为这可能是一个简单而惯用的解决方案。简而言之,我需要收集列表中的每个顺序对。例如,给定列表,我想计算。 当时我想出了一个快速的解决方案,看起来像翻译过的Java。再问这个问题,我能做的最好的就是 在长度不均的情况下,这会产生丢掉最后一个数字的副作用。 我是否缺少一

  • 我创建了一个简单的测试,用户使用OpenAm登录系统,然后注销。我把我的线程组放在一个循环中工作,在第一次迭代中它工作正常。但当它进入下一次迭代时,我的测试失败了,因为有人试图登录,当然他不能。 我有15个用户证书并创建了。jks文件基于它们。用户名是,例如“hperfteste001”等等。我配置了“Keystore Configuration”配置元素,并在系统中提供了路径和密码。属性文件 我

  • 我必须文件上传操作连续,第一个图像像gif|jpg|jpeg|png|svg和第二个psd|rar|zip|doc|word|txt|xlsx|pdf第一个工作正常,我可以上传所有图像,但第二个,我不能上传任何这些类型但当我尝试上传图像在第二段它的作品。

  • 我正在尝试实现一个类似问题的系统。这些问题应该根据数据属性“投票”重新排序。因此,每次从套接字接收到like事件时,都会调用sort函数。当一个问题第一次被喜欢时,所有的事情都很好,列表也被排序了。但它会停止排序。我已经检查了数据值。 下面是我的js功能:

  • 问题内容: 许多工具/ API提供了选择特定类或ID的元素的方法。也可以检查浏览器加载的原始样式表。 但是,对于浏览器渲染元素而言,它们将编译所有CSS规则(可能来自不同的样式表文件)并将其应用于元素。这是您在Firebug或WebKit Inspector中看到的-元素的完整CSS继承树。 如何在不需要其他浏览器插件的情况下用纯JavaScript重现此功能? 也许一个例子可以澄清我在寻找什么:

  • 我正在做一个与运行时间有关的练习。exec(),我理解这个运行时。exec不是shell解释器,这就是为什么我执行“bash-c'command'”,但出于某种原因,我可以执行像ls这样的命令,但不能执行echo或重定向或多个命令。这些都不起作用: 这是我的java代码: 我使用以下语法运行上述命令: 这是有效的: 我在Ubuntu 20.04和zsh上使用openjdk 11.0.15。有人能告