Vous posez peut-être des questions sur méthodes DOMappendChild
et insertBefore
.
parentNode.insertBefore(newChild, refChild)
Insère le noeud
newChild
en tant qu'enfant deparentNode
avant le noeud enfant existantrefChild
. (RetournenewChild
.)Si
refChild
est nul,newChild
est ajouté à la fin de la liste des enfants. De manière équivalente et plus lisible, utilisezparentNode.appendChild(newChild)
.
Voici un extrait pour vous aider à démarrer:
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.firstChild
nous donnera une référence au premier élément dans theParent
et mettra theKid
devant lui.
Vous ne nous avez pas donné beaucoup pour continuer ici, mais je pense que vous demandez simplement comment ajouter du contenu au début ou à la fin d'un élément? Si oui, voici comment vous pouvez le faire assez facilement:
//get the target div you want to append/prepend to
var 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;
Plutôt facile.
Si vous souhaitez insérer une chaîne HTML brute, quelle que soit sa complexité, vous pouvez utiliser: insertAdjacentHTML
, avec 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.
Indice: vous pouvez toujours appeler Element.outerHTML
pour obtenir la chaîne HTML représentant l'élément à insérer.
Un exemple d'utilisation:
document.getElementById("foo").insertAdjacentHTML("beforeBegin",
"<div><h1>I</h1><h2>was</h2><h3>inserted</h3></div>");
Attention: insertAdjacentHTML
ne conserve pas les écouteurs liés à .addEventLisntener
.
Pour vous simplifier la vie, vous pouvez étendre l’objet HTMLElement
. Cela ne fonctionnera peut-être pas pour les anciens navigateurs, mais vous facilitera certainement la vie:
HTMLElement = typeof(HTMLElement) != 'undefined' ? HTMLElement : Element;
HTMLElement.prototype.prepend = function(element) {
if (this.firstChild) {
return this.insertBefore(element, this.firstChild);
} else {
return this.appendChild(element);
}
};
Alors la prochaine fois que vous pourrez faire ça:
document.getElementById('container').prepend(document.getElementById('block'));
// or
var element = document.getElementById('anotherElement');
document.body.prepend(div);
Je l'ai ajouté à 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]);
}
};
Exemple:
document.body.prependHtml(`<a href="#">Hello World</a>`);
document.body.appendHtml(`<a href="#">Hello World</a>`);
Voici un exemple d'utilisation de prepend pour ajouter un paragraphe au document.
var element = document.createElement("p");
var text = document.createTextNode("Example text");
element.appendChild(text);
document.body.prepend(element);
résultat:
<p>Example text</p>
En 2017 Je connais 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 à polyfill une fonction que j'ai faite ceci:
HTMLDivElement.prototype.prepend = (node, ele)=>{
try { node.insertBefore(ele ,node.children[0]);}
catch (e){ throw new Error(e.toString()) } }
Fonction de flèche simple compatible avec la plupart des navigateurs modernes.
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.
Des exemples peuvent être trouvés ici: Node.insertBefore
Vous pouvez également utiliser unshift () pour ajouter une liste si vous utilisez Node.js