@GenericTypeTea: Moi aussi, à peu près au même moment ... Je vais laisser ça tranquille maintenant!
Mark Byers
@Mark - Votre montage était meilleur :).
djdd87
Réponses:
147
Vous posez peut-être des questions sur les méthodes DOMappendChild et insertBefore.
parentNode.insertBefore(newChild, refChild)
Insère le nœud en newChildtant qu'enfant parentNodeavant le nœud enfant existant refChild. (Retourne newChild.)
Si refChildest nul, newChildest ajouté à la fin de la liste des enfants. Utilisez de manière équivalente et plus lisible
parentNode.appendChild(newChild).
donc préfixer est essentiellement ceci alorsfunction prepend(tag, ele) { var x =document.getElementsByTagName(tag)[0]; x.insertBefore(ele ,x.children[0]); }
Muhammad Umer
166
Voici un extrait de code pour vous aider:
theParent = document.getElementById("theParent");
theKid = document.createElement("div");
theKid.innerHTML ='Are we there yet?';// append theKid to the end of theParent
theParent.appendChild(theKid);// prepend theKid to the beginning of theParent
theParent.insertBefore(theKid, theParent.firstChild);
theParent.firstChildnous donnera une référence au premier élément à l'intérieur theParentet mis theKiddevant lui.
Merci, pourquoi pour préfixer simplement utiliser insertBefore sans créer de div supplémentaire? comme la réponse de Grumdrig?
Yosef
cela crée un élément et l'ajoute au dom, ajoute et ajoute le travail différemment
Andrei Cristian Prodan
Je comprends celui-ci comparé à la réponse de Grumdig
andrew
10
Nous sommes en 2015. Pouvons-nous encore avoir une prepend()méthode intégrée ?
1,21 gigawatts
Node.append ou node.appendChild sont des méthodes void, utilisez plutôt insertBefore (node, null)
Suhayb
28
Vous ne nous avez pas donné grand-chose à faire ici, mais je pense que vous demandez simplement comment ajouter du contenu au début ou à la fin d'un élément? Si tel est le cas, voici comment vous pouvez le faire assez facilement:
//get the target div you want to append/prepend tovar someDiv = document.getElementById("targetDiv");//append text
someDiv.innerHTML +="Add this text to the end";//prepend text
someDiv.innerHTML ="Add this text to the beginning"+ someDiv.innerHTML;
@Munzilla Cette méthode forcera le navigateur à analyser à nouveau tous les enfants existants. Dans les solutions ci-dessus, le navigateur doit simplement attacher l'enfant donné au document.
Sayam Qazi
12
Si vous souhaitez insérer une chaîne HTML brute quelle que soit sa complexité, vous pouvez utiliser:,
insertAdjacentHTMLavec le premier argument approprié:
'beforebegin'
Avant l'élément lui-même.
'afterbegin'
Juste à l'intérieur de l'élément, avant son premier enfant.
'beforeend'
Juste à l'intérieur de l'élément, après son dernier enfant.
'afterend'
Après l'élément lui-même.
Astuce: vous pouvez toujours appeler Element.outerHTMLpour obtenir la chaîne HTML représentant l'élément à insérer.
" insertAdjacentHTMLne préserve pas les auditeurs ..." Quels auditeurs? C'est du HTML, donc il n'y a pas encore d'éléments à lier. Si vous faisiez référence à des éléments existants à l'intérieur foo, ce n'est pas une vraie déclaration. Le but .insertAdjacentHTMLest de préserver les auditeurs. Vous pensez peut-être à .innerHTML += "..."ce qui détruit les anciens nœuds DOM.
spanky
@spanky Vous avez raison, cette déclaration peut être interprétée de plusieurs façons, ce que je voulais dire, c'était les nœuds DOM fraîchement créés avec insertAdjacentHTML(pas la racine ni les descendants existants de la racine)
artur grzesiak
6
J'ai ajouté ceci sur mon projet et cela semble fonctionner:
HTMLElement.prototype.prependHtml =function(element){const div = document.createElement('div');
div.innerHTML = element;this.insertBefore(div,this.firstChild);};HTMLElement.prototype.appendHtml =function(element){const div = document.createElement('div');
div.innerHTML = element;while(div.children.length >0){this.appendChild(div.children[0]);}};
Afin de vous simplifier la vie, vous pouvez prolonger l' HTMLElementobjet. Cela peut ne pas fonctionner pour les navigateurs plus anciens, mais vous facilite définitivement la vie:
et si le nœud n'a pas de nœuds enfants? Dans ce cas, firstChild sera nul
felixfbecker
prepend existe déjà, voir ParentNode.prepend (), donc pour faire prependChild il suffit d'appeler prnt.prepend (chld)
Igor Fomenko le
2
Voici un exemple d'utilisation du préfixe pour ajouter un paragraphe au document.
var element = document.createElement("p");var text = document.createTextNode("Example text");
element.appendChild(text);
document.body.prepend(element);
En 2017, je sais que pour Edge 15 et IE 12, la méthode prepend n'est pas incluse en tant que propriété pour les éléments Div, mais si quelqu'un a besoin d'une référence rapide pour polyfill une fonction, j'ai fait ceci:
var insertedElement = parentElement.insertBefore(newElement, referenceElement);
Si referenceElement est null ou non défini, newElement est inséré à la fin de la liste des nœuds enfants.
insertedElement The node being inserted, that is newElement
parentElement The parent of the newly inserted node.
newElement The node to insert.
referenceElement The node before which newElement is inserted.
Réponses:
Vous posez peut-être des questions sur les méthodes DOM
appendChild
etinsertBefore
.la source
function prepend(tag, ele) { var x =document.getElementsByTagName(tag)[0]; x.insertBefore(ele ,x.children[0]); }
Voici un extrait de code pour vous aider:
theParent.firstChild
nous donnera une référence au premier élément à l'intérieurtheParent
et mistheKid
devant lui.la source
prepend()
méthode intégrée ?Vous ne nous avez pas donné grand-chose à faire ici, mais je pense que vous demandez simplement comment ajouter du contenu au début ou à la fin d'un élément? Si tel est le cas, voici comment vous pouvez le faire assez facilement:
Plutôt facile.
la source
Si vous souhaitez insérer une chaîne HTML brute quelle que soit sa complexité, vous pouvez utiliser:,
insertAdjacentHTML
avec le premier argument approprié:Astuce: vous pouvez toujours appeler
Element.outerHTML
pour obtenir la chaîne HTML représentant l'élément à insérer.Un exemple d'utilisation:
DEMO
Attention:
insertAdjacentHTML
ne préserve pas les écouteurs qui étaient attachés avec.addEventLisntener
.la source
insertAdjacentHTML
ne préserve pas les auditeurs ..." Quels auditeurs? C'est du HTML, donc il n'y a pas encore d'éléments à lier. Si vous faisiez référence à des éléments existants à l'intérieurfoo
, ce n'est pas une vraie déclaration. Le but.insertAdjacentHTML
est de préserver les auditeurs. Vous pensez peut-être à.innerHTML += "..."
ce qui détruit les anciens nœuds DOM.insertAdjacentHTML
(pas la racine ni les descendants existants de la racine)J'ai ajouté ceci sur mon projet et cela semble fonctionner:
Exemple:
la source
Afin de vous simplifier la vie, vous pouvez prolonger l'
HTMLElement
objet. Cela peut ne pas fonctionner pour les navigateurs plus anciens, mais vous facilite définitivement la vie:Alors la prochaine fois que vous pourrez faire ceci:
la source
Voici un exemple d'utilisation du préfixe pour ajouter un paragraphe au document.
résultat:
la source
En 2017, je sais que pour Edge 15 et IE 12, la méthode prepend n'est pas incluse en tant que propriété pour les éléments Div, mais si quelqu'un a besoin d'une référence rapide pour polyfill une fonction, j'ai fait ceci:
Fonction de flèche simple compatible avec la plupart des navigateurs modernes.
la source
Si referenceElement est null ou non défini, newElement est inséré à la fin de la liste des nœuds enfants.
Des exemples peuvent être trouvés ici: Node.insertBefore
la source
Vous pouvez également utiliser unshift () pour ajouter à une liste
la source
Ce n'est pas la meilleure façon de le faire, mais si quelqu'un veut insérer un élément avant tout, voici un moyen.
la source