Javascript HTMLCollection和节点列表

Javascript HTMLCollection和节点列表,javascript,Javascript,您好,我遇到了一个问题,我试图抓取所有图像,以便循环浏览它们并添加以下事件处理程序: addEventListener('dragstart', handleDragStart, false); addEventListener('dragenter', handleDragEnter, false); addEventListener('dragover', handleDragOver, false); addEventListener('dragleave', handle

您好,我遇到了一个问题,我试图抓取所有图像,以便循环浏览它们并添加以下事件处理程序:

  addEventListener('dragstart', handleDragStart, false);
  addEventListener('dragenter', handleDragEnter, false);
  addEventListener('dragover', handleDragOver, false);
  addEventListener('dragleave', handleDragLeave, false);
我有点困惑,因为我尝试了getelementbyid来获取所有图像通过AJAX动态填充的区域。现在在querySelectorAl方面 l()似乎什么也抓不到。我想我只是用错了。也许它不响应标签。但我尝试了getElementsByTagName,它似乎抓住了所有东西并将其放入HTMLCollection。然而HTML集合的长度是0。是否有一种使用Javascript(而不是jquery)将这些事件处理程序附加到每个IMG的最佳实践方法?我在这里不知所措,不知如何抓住并操纵它们。长度似乎不起作用,我不习惯HTMLCollection,这似乎就是我得到的

var imagesContainer = document.getElementById("images");

var allImages = document.querySelectorAll('#images img');
console.log(allImages);
console.log(allImages.length);

var allImages2 = imagesContainer.getElementsByTagName("img");
console.log(allImages2);
console.log(allImages2.length);

我断定bfavaretto是正确的。为了检查dom是否正在加载,我将add事件处理程序移动到一个位置,以便在ajax调用完成后加载图像(在if语句中检查readyState和readyStatus)。我以前没有想到这一点,因为我个人误解了DOM是如何加载它的HTMLCollection和数组长度的,并且认为一旦加载了所有内容,它就会加载。虽然它正确地抓取了所有图像,但根据我的理解,DOM没有加载以抓取并完全构建长度。

您确定在尝试查找图像时图像已经在DOM中吗?有方法检查吗?据我所知,这是因为HTMLCollection会将它们拾取,并用这两个图像显示这两个图像(尽管可能会有更多图像)。我很抱歉,你是对的。我把代码放在我的回调函数后,一切都是明确的popperated,它似乎现在工作。我想我还必须确保在该函数中附加事件侦听器。由于DOM的工作方式,我没有意识到它可以获取图像名称而不能获取长度。这就是为什么jQuery在DOM完成加载时具有回调功能非常有用。你应该写下你的更新作为一个答案,并接受它,让别人知道你是如何解决你的问题。