appendTo () et append () fonctionnent, appendChild () ne fonctionne pas

Dans le cadre d’une interface de téléchargement de fichier par glisser-déposer, showImage est appelée lorsqu’un fichier est déposé sur le conteneur cible. showImage vérifie que le fichier est une image, lit le fichier, crée un nouvel object Image , définit les données du fichier d’image supprimé en tant que src et insère le nouvel élément dans le DOM.

Pour une insertion DOM, l’appel de appendTo ou append de jQuery fonctionne, mais la méthode native appendChild renvoie l’erreur: Uncaught TypeError: undefined is not a function . Quelle est la raison pour ça?

 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); } }; 

querySelectorAll() renvoie une liste de nœuds. Pour obtenir le premier élément, accédez-y par index:

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

Un certain traitement des erreurs pour s’assurer qu’il trouve quelque chose serait probablement en ordre.

 querySelectorAll() 

renvoie toujours la liste de nœuds en direct, qui ressemble à un tableau. Vous devez donc utiliser .each() ou une for loop , ou spécifier l’index de l’élément que vous ciblez.