作为拖放文件上传界面的一部分,在目标容器上放置文件时会调用showImage
。 showImage
检查文件是否为图像,读取文件,创建新的Image
对象,将删除的图像文件的数据设置为src
,并将新元素插入DOM。
对于DOM插入,调用jQuery的appendTo
或append
可以正常工作,但本机方法appendChild
会返回错误:Uncaught TypeError: undefined is not a function
。这是什么原因?
var showImage = function(droppedImg) {
var imageType = /image.*/;
if (droppedImg.type.match(imageType)) {
var reader = new FileReader();
reader.onload = function(e) {
if (e.target.readyState == FileReader.DONE) {
newImg = new Image();
newImg.onload = function(e) {
if (e.target.readyState == Image.DONE) {
//No DOM insertion. Throws this error: Uncaught TypeError: undefined is not a function
var dropTarg = document.querySelectorAll('.drop-container');
dropTarg.appendChild(newImg);
//Image inserted into DOM
$('.drop-container').append(newImg);
//Image inserted into DOM
$(newImg).appendTo('.drop-container');
}
};
newImg.src = reader.result;
}
}
reader.readAsDataURL(droppedImg);
}
};
答案 0 :(得分:3)
querySelectorAll()
返回节点列表。要获取第一个元素,请通过索引访问它:
var dropTarg = document.querySelectorAll('.drop-container')[0];
dropTarg.appendChild(newImg);
为了确保找到某些内容,可能需要进行一些错误处理。
答案 1 :(得分:1)
querySelectorAll()
始终返回类似于数组的实时节点列表,因此您必须使用.each()
或for loop
,或指定您要定位的元素的索引。