我正在尝试计算 div 中的所有 img 。 要将图像添加到 div ,我使用一个如下所示的jquery函数:
function AddImages(namearray, amount, speed) {
...
}, speed)
所有图像都正确添加到div元素中。 。 在此之后,我想用这个来计算图像标签的数量:
var count = $("#myDiv").find('img').length;
OR
var count = document.getElementById("#myDiv").getElementsByTagName("img").length
虽然在计数之前执行了AddImages()函数,但这并没有奏效。
有没有人对此有所了解?
答案 0 :(得分:2)
问题是图像是在多个帧的过程中添加的,但是函数立即返回,因此尚未添加任何图像来计算。
您可以将回调添加到AddImages
(首选),以便您知道图像 的所有内容都已添加,或者只是在检查之前等待一段时间(这是实际上你用调试器做了什么。)
e.g。
var i = 0;
var uniekeid = 0;
function plaatsRandomPion(naamarray, aantal, snelheid, callback) {
setTimeout(function () {
uniekeid = uniekeid + 1;
var xpictures = Math.floor(sizepictures * Math.random())
var item = $("<img src='" + naamarray[xpictures] + "' id='" + uniekeid + "' />").hide().fadeIn();
$('#depionnen').append(item);
console.log(item);
i++;
if (i < aantal) {
plaatsRandomPion(naamarray, aantal, snelheid, callback);
}
else {
// We are done... callback to let the caller know
// Note: check whether the callback exists first
callback && callback();
}
}, snelheid)
}
并且这样打电话:
plaatsRandomPion(pictures, 20, 100, function(){
var count = $("#box").find('img').length;
// Now the count will be set!
});
JSFiddle: https://jsfiddle.net/TrueBlueAussie/kcffgq26/4/
一个更“现代”的解决方案是使用jQuery承诺,但现在对于这个简单的问题来说太过分了。
注意:在函数外部使用全局设置(例如uniekeid
&amp; i
)通常是不可重复使用的代码的标志。您可以通过简单地每次使用slice
减少数组并递归传递较短的数组直到它为空来获得相同的效果,没有计数器。由于您似乎想要随机选择图像,我建议先对数组进行随机排序(以避免重复图像)。