1092 Stimmen

Wie fügt man ein Element nach einem anderen Element in JavaScript ein, ohne eine Bibliothek zu verwenden?

Es gibt insertBefore() in JavaScript, aber wie kann ich ein Element einfügen nach ein anderes Element, ohne jQuery oder eine andere Bibliothek zu verwenden?

4 Stimmen

Wenn Sie den Sonderfall des allerletzten untergeordneten Knotens benötigen - stackoverflow.com/questions/5173545/

4 Stimmen

@AlanLarimer das ist großartig. danke. wissen Sie, wann insertAdjacentElement eingeführt wurde?

0voto

jszhou Punkte 1

Eine robuste Implementierung von insertAfter.

// source: https://github.com/jserz/domPlus/blob/master/src/insertAfter()/insertAfter.js
Node.prototype.insertAfter = Node.prototype.insertAfter || function (newNode, referenceNode) {
  function isNode(node) {
    return node instanceof Node;
  }

  if(arguments.length < 2){
    throw(new TypeError("Failed to execute 'insertAfter' on 'Node': 2 arguments required, but only "+ arguments.length +" present."));
  }

  if(isNode(newNode)){
    if(referenceNode === null || referenceNode === undefined){
      return this.insertBefore(newNode, referenceNode);
    }

    if(isNode(referenceNode)){
      return this.insertBefore(newNode, referenceNode.nextSibling);
    }

    throw(new TypeError("Failed to execute 'insertAfter' on 'Node': parameter 2 is not of type 'Node'."));
  }

  throw(new TypeError("Failed to execute 'insertAfter' on 'Node': parameter 1 is not of type 'Node'."));
};

0 Stimmen

Fügen Sie eine Erklärung mit der Antwort hinzu, wie diese Antwort dem OP bei der Lösung des aktuellen Problems hilft

0 Stimmen

Führen Sie den obigen Code aus, dann können Sie einen newNode nach dem angegebenen referenceNode einfügen.

0voto

Sami Punkte 7844

Lasst uns alle Szenarien behandeln

 function insertAfter(newNode, referenceNode) {
        if(referenceNode && referenceNode.nextSibling && referenceNode.nextSibling.nodeName == '#text')
            referenceNode = referenceNode.nextSibling;

        if(!referenceNode)
            document.body.appendChild(newNode);
        else if(!referenceNode.nextSibling)
            document.body.appendChild(newNode);
        else            
            referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);            
    }

0voto

yavuzkavus Punkte 1258
if( !Element.prototype.insertAfter ) {
    Element.prototype.insertAfter = function(item, reference) {
        if( reference.nextSibling )
            reference.parentNode.insertBefore(item, reference.nextSibling);
        else
            reference.parentNode.appendChild(item);
    };
}

0voto

eQ19 Punkte 8782

Dieser Code dient zum Einfügen eines Verknüpfungselements direkt nach dem letzten vorhandenen Kind zu Inlinern eine kleine css-Datei

var raf, cb=function(){
    //create newnode
    var link=document.createElement('link');
    link.rel='stylesheet';link.type='text/css';link.href='css/style.css';

    //insert after the lastnode
    var nodes=document.getElementsByTagName('link'); //existing nodes
    var lastnode=document.getElementsByTagName('link')[nodes.length-1]; 
    lastnode.parentNode.insertBefore(link, lastnode.nextSibling);
};

//check before insert
try {
    raf=requestAnimationFrame||
        mozRequestAnimationFrame||
        webkitRequestAnimationFrame||
        msRequestAnimationFrame;
}
catch(err){
    raf=false;
}

if (raf)raf(cb); else window.addEventListener('load',cb);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X