appendTo()和append()起作用,appendChild()不起作用

时间:2014-04-30 13:37:53

标签: javascript jquery

作为拖放文件上传界面的一部分,在目标容器上放置文件时会调用showImageshowImage检查文件是否为图像,读取文件,创建新的Image对象,将删除的图像文件的数据设置为src,并将新元素插入DOM。

对于DOM插入,调用jQuery的appendToappend可以正常工作,但本机方法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);
    }
};

2 个答案:

答案 0 :(得分:3)

querySelectorAll()返回节点列表。要获取第一个元素,请通过索引访问它:

var dropTarg = document.querySelectorAll('.drop-container')[0];
dropTarg.appendChild(newImg);

为了确保找到某些内容,可能需要进行一些错误处理。

答案 1 :(得分:1)

querySelectorAll()

始终返回类似于数组的实时节点列表,因此您必须使用.each()for loop,或指定您要定位的元素的索引。