完成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.add
用pic
其他一个或多个其他元素替换命名的元素,会发生什么情况。
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。有人能告