recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Pourquoi parent doit-il être écrit devant la fonction insertBefore alors qu'il n'est pas nécessaire lorsqu'il est appliqué à d'autres fonctions?

function insertAfter(newElement,targetElment) {
    var parent = targetElment.parentNode;
    if(parent.lastChild == targetElment) {
        parent.appendChild(newElement); 
    } else {
        parent.insertBefore(newElement,targetElment.nextSibling);
    }
}
为情所困为情所困2767 Il y a quelques jours1015

répondre à tous(1)je répondrai

  • 習慣沉默

    習慣沉默2017-05-19 10:26:28

    Étant donné que le nœud DOM n'a pas cette méthode, si vous souhaitez l'utiliser de cette façon, implantez simplement la méthode dans le prototype du nœud

    Node.prototype.insertAfter = function insertAfter(newNode, targetNode) {
      if (!(this instanceof Node)) {
        throw new TypeError('Illegal invocation')
      }
      
      if (arguments.length < 2) {
        throw new TypeError("Failed to execute 'insertAfter' on 'Node': 2 arguments required, but only " + arguments.length +" present.")
      }
      
      if (!(newNode instanceof Node)) {
        throw new TypeError("Failed to execute 'insertAfter' on 'Node': parameter 1 is not of type 'Node'.")
      }
      
      if (targetNode !== null && !(targetNode instanceof Node)) {
        throw new TypeError("Failed to execute 'insertAfter' on 'Node': parameter 2 is not of type 'Node'.")
      }
      
      if (targetNode !== null && targetNode.parentNode !== this) {
        throw new DOMException("Failed to execute 'insertAfter' on 'Node': The node before which the new node is to be inserted is not a child of this node.")
      }
    
      if(!targetNode || this.lastChild == targetNode) {
        this.appendChild(newNode); 
      } else {
        this.insertBefore(newNode, targetNode.nextSibling);
      }
    }

    De cette façon, vous pouvez utiliser un certain traitement de parent.insertAfter(newElement, targetElment),这里模仿了 insertBefore.

    répondre
    0
  • Annulerrépondre