วิธีแทรกองค์ประกอบหลังจากองค์ประกอบอื่นใน JavaScript โดยไม่ต้องใช้ห้องสมุดได้อย่างไร


757

มีinsertBefore()อยู่ใน JavaScript แต่ฉันจะแทรกองค์ประกอบหลังจากองค์ประกอบอื่นโดยไม่ใช้ jQuery หรือไลบรารีอื่นได้อย่างไร


4
หากคุณต้องการกรณีเฉพาะของโหนดลูกล่าสุด - stackoverflow.com/questions/5173545/ …


2
@ AlanLarimer นั้นยอดเยี่ยม ขอบคุณ คุณรู้หรือไม่เมื่อมีการแทรกของ
Xah Lee

1
MDN รองรับ IE8 และ Firefox 48 (2559 สิงหาคม 08) ติดตามเส้นทาง: bugzilla.mozilla.org/show_bug.cgi?id=811259 -> w3.org/Bugs/Public/show_bug.cgi?id=19962 (2016 14 มีนาคม)
Alan Larimer

คำตอบ:


1276
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);

ที่ไหนreferenceNodeเป็นโหนดที่คุณต้องการที่จะนำnewNodeหลัง ถ้าreferenceNodeเป็นลูกคนสุดท้ายในองค์ประกอบหลักของมันก็ไม่เป็นไรเพราะreferenceNode.nextSiblingจะเป็นnullและinsertBeforeจัดการกรณีนั้นโดยการเพิ่มไปยังจุดสิ้นสุดของรายการ

ดังนั้น:

function insertAfter(newNode, referenceNode) {
    referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}

คุณสามารถทดสอบโดยใช้ตัวอย่างต่อไปนี้:

function insertAfter(referenceNode, newNode) {
  referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}

var el = document.createElement("span");
el.innerHTML = "test";
var div = document.getElementById("foo");
insertAfter(div, el);
<div id="foo">Hello</div>


8
ขอบคุณสำหรับคำตอบที่ดี แต่มันไม่สับสนที่จะพลิกการอ้างอิงโหนดและ newNode ในรายการอาร์กิวเมนต์หรือไม่ ทำไมไม่สอดคล้องกับไวยากรณ์ insertBefore?
GijsjanB

9
ข้อมูลโค้ดนี้ไม่สามารถจัดการได้ถ้า referenceNode เป็นลูกคนสุดท้ายซึ่งควรผนวกท้ายเด็ก
Brad Vogel

72
ตามMDNหากองค์ประกอบนั้นเป็นลำดับสุดท้าย (และถัดไปเป็นพี่น้องเป็นโมฆะ) โหนดใหม่จะถูกผนวกเข้าด้วยตามที่คาดไว้
electroCutie

9
ReferenceNode.nextElementSibling เป็นตัวเลือกที่ดีกว่าที่จะใช้
Bhumi Singhal

8
@BhumiSinghal: ผิด insertBefore()ทำงานร่วมกับโหนดข้อความ ทำไมคุณinsertAfter()ถึงต้องการแตกต่าง คุณควรสร้างฟังก์ชั่นแยกคู่ที่มีชื่อinsertBeforeElement()และinsertAfterElement()สำหรับสิ่งนั้น
7vujy0f0hy

116

จาวาสคริปต์ตรงไปตรงมาจะเป็นดังต่อไปนี้:

ผนวกก่อน:

element.parentNode.insertBefore(newElement, element);

ผนวกหลังจาก:

element.parentNode.insertBefore(newElement, element.nextSibling);

แต่โยนต้นแบบบางอย่างในนั้นเพื่อความสะดวกในการใช้งาน

ด้วยการสร้างต้นแบบต่อไปนี้คุณจะสามารถเรียกใช้ฟังก์ชันเหล่านี้ได้โดยตรงจากองค์ประกอบที่สร้างขึ้นใหม่

  • newElement.appendBefore(element);

  • newElement.appendAfter(element);

. ผนวก Before (องค์ประกอบ) ต้นแบบ

Element.prototype.appendBefore = function (element) {
  element.parentNode.insertBefore(this, element);
},false;

.appendAfter (องค์ประกอบ) ต้นแบบ

Element.prototype.appendAfter = function (element) {
  element.parentNode.insertBefore(this, element.nextSibling);
},false;

และหากต้องการดูทุกอย่างในการดำเนินการให้เรียกใช้ข้อมูลโค้ดต่อไปนี้

รันบน JSFiddle


4
นามสกุลชื่อฟังก์ชั่นจะทำให้เข้าใจผิด มันคิดว่ามันควรจะเรียกว่า appendMe ก่อนหน้านี้และต่อท้าย meAfter ฉันคิดว่ามันถูกนำมาใช้เช่นappendChild () วิธีexistingElement.appendAfter(newElement);เช่น ดูว่าฉันหมายถึงอะไรในjsfiddle ที่อัปเดตนี้
stomtech

2
ผนวกหลังจากทำงานเพราะถ้า element.nextSibling ไม่มีพี่น้องคนถัดไปพี่น้องคนถัดไปจะเป็น NULL จากนั้นจะผนวกท้ายที่สุด
Stefan Steiger

45

insertAdjacentHTML + outerHTML

elementBefore.insertAdjacentHTML('afterEnd', elementAfter.outerHTML)

upsides:

  • เครื่องอบแห้ง: คุณไม่จำเป็นต้องเก็บโหนดไว้ก่อนในตัวแปรและใช้มันสองครั้ง หากคุณเปลี่ยนชื่อตัวแปรในการแก้ไขน้อยกว่า
  • golfs ดีกว่าinsertBefore(break แม้ว่าชื่อโหนดที่มีอยู่คือ 3 chars)

ข้อเสีย:

  • การสนับสนุนเบราว์เซอร์ที่ต่ำลงตั้งแต่ใหม่กว่า: https://caniuse.com/#feat=insert-adighbor
  • จะสูญเสียคุณสมบัติขององค์ประกอบเช่นเหตุการณ์เนื่องจากouterHTMLแปลงองค์ประกอบเป็นสตริง เราต้องการเพราะinsertAdjacentHTMLเพิ่มเนื้อหาจากสตริงมากกว่าองค์ประกอบ

12
หากคุณมีองค์ประกอบที่สร้างไว้แล้วคุณสามารถใช้.insertAdjacentElement()
GetFree

6
ตั้งแต่ปี 2018 การสนับสนุนเบราว์เซอร์ดูค่อนข้างแข็งแกร่ง: caniuse.com/#feat=insert-adrants
madannes

นี่เป็นทางออกที่ดีฉันขอแนะนำให้ eveyone อ่านxahlee.info/js/js_insert_after.html
Mehregan Rahmani

37

การค้นหาโดย Google อย่างรวดเร็วเปิดเผยสคริปต์นี้

// create function, it expects 2 values.
function insertAfter(newElement,targetElement) {
    // target is what you want it to go after. Look for this elements parent.
    var parent = targetElement.parentNode;

    // if the parents lastchild is the targetElement...
    if (parent.lastChild == targetElement) {
        // add the newElement after the target element.
        parent.appendChild(newElement);
    } else {
        // else the target has siblings, insert the new element between the target and it's next sibling.
        parent.insertBefore(newElement, targetElement.nextSibling);
    }
}

29
สำหรับผู้ที่สะดุดกับสคริปต์นี้ฉันไม่แนะนำให้ใช้ มันพยายามที่จะแก้ปัญหาที่การแก้ปัญหาพื้นฐานของ @karim79 ได้แก้ไขไปแล้ว สคริปต์ของเขาเร็วขึ้นและมีประสิทธิภาพยิ่งขึ้น - ฉันขอแนะนำให้ใช้สคริปต์นั้นแทนสคริปต์นี้
James Long

10
ในฐานะที่เป็นกฎทั่วไปของหัวแม่มือใน JavaScript เบราว์เซอร์สามารถทำงานได้เร็วกว่าสิ่งใดก็ตามที่คุณสามารถเขียนได้ แม้ว่าโซลูชันทั้งสองนั้นจะทำงานได้เหมือนกัน แต่โซลูชัน JavaScript ของฉันต้องอ่านเข้าใจโดยเบราว์เซอร์ก่อนจึงจะสามารถใช้และต้องตรวจสอบเพิ่มเติมทุกครั้งที่มีการดำเนินการ โซลูชันที่นำเสนอโดย karim79 จะทำสิ่งนี้ทั้งหมดภายในบันทึกขั้นตอนเหล่านั้น ความแตกต่างจะเล็กน้อยที่ดีที่สุด แต่ทางออกของเขาดีกว่า
James Long

3
กล่าวอีกนัยหนึ่งก็คือการพยายามแก้ไขปัญหาที่ไม่มีอยู่จริง ไม่มีอะไรผิดปกติเกี่ยวกับการตรวจสอบพิเศษ แต่ฉันคิดว่ามันไม่ได้เผยแพร่ความเข้าใจที่ดีที่สุดของวิธีการเหล่านี้
1j01

3
ค่อนข้างมาก ฉันทิ้งสคริปต์ไว้ที่นี่เพราะมันเป็นสิ่งที่ฉันเคยเขียน แต่คำตอบที่ได้รับการยอมรับคือคำตอบที่ดีกว่าแสดงความเข้าใจที่ดีขึ้นเกี่ยวกับวิธีการและเร็วขึ้น ไม่มีเหตุผลใช้คำตอบนี้แทน - ฉันไม่แน่ใจด้วยซ้ำว่าทำไมถึงยังได้รับการโหวต
James Long

3
หาก targetElement เป็นองค์ประกอบสุดท้ายในหมู่พี่น้องของมันแล้วจะกลับมาtargetElement.nextSibling nullเมื่อnode.insertBeforeถูกเรียกด้วยnullเป็นอาร์กิวเมนต์ที่สองมันจะเพิ่มโหนดที่ส่วนท้ายของคอลเลกชัน กล่าวอีกนัยif(parent.lastchild == targetElement) {หนึ่งสาขาฟุ่มเฟือยเพราะparent.insertBefore(newElement, targetElement.nextSibling);จะจัดการอย่างถูกต้องกับทุกกรณีแม้ว่ามันอาจปรากฏเป็นอย่างอื่นในตอนแรก หลายคนชี้ไปที่ความคิดเห็นอื่นแล้ว
Rolf

26

แม้ว่าinsertBefore()(ดูMDN ) นั้นยอดเยี่ยมและถูกอ้างอิงโดยคำตอบส่วนใหญ่ที่นี่ เพื่อความยืดหยุ่นที่เพิ่มขึ้นและเพื่อให้ชัดเจนยิ่งขึ้นคุณสามารถใช้:

insertAdjacentElement()(ดูMDN ) สิ่งนี้จะช่วยให้คุณอ้างอิงองค์ประกอบใด ๆ และแทรกองค์ประกอบที่จะย้ายได้ตรงตามที่คุณต้องการ:

<!-- refElem.insertAdjacentElement('beforebegin', moveMeElem); -->
<p id="refElem">
    <!-- refElem.insertAdjacentElement('afterbegin', moveMeElem); -->
    ... content ...
    <!-- refElem.insertAdjacentElement('beforeend', moveMeElem); -->
</p>
<!-- refElem.insertAdjacentElement('afterend', moveMeElem); -->

อื่น ๆ ที่ต้องพิจารณาสำหรับกรณีการใช้งานที่คล้ายกัน: insertAdjacentHTML()และinsertAdjacentText()

อ้างอิง:

https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdvertiseElement https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdvertiseHTML https: // developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentText


ควรให้คำตอบนี้กับความรักจริงๆมันเป็นแนวทางที่ทันสมัยสำหรับปี 2020 ที่ใกล้เข้ามาอย่างรวดเร็ว
serraosays

1
ทำไมคำตอบนี้จึงถูกฝังลึกอย่างมาก? ฉันจะให้รางวัลแก่บางจุดเพื่อให้ความสนใจมากขึ้น
Qwerty

16

เมธอดnode.after( doc ) แทรกโหนดหลังโหนดอื่น

สำหรับสองโหนด DOM node1และnode2,

node1.after(node2)แทรกหลังnode2node1

วิธีนี้ไม่สามารถใช้ได้กับเบราว์เซอร์รุ่นเก่าดังนั้นโดยปกติจะต้องมีการเติม


นี่ใช้งานคู่มือเล็กน้อยเพื่อนำไปใช้เป็น insertAfter ที่ใช้งานได้ แต่น่าเสียดายที่ฉันไม่คิดว่ามันจะทำงานได้อย่างถูกต้อง
นาย SirCode

6

โซลูชัน 2018 (การปฏิบัติที่ไม่ดีไปที่ 2020)

ฉันรู้ว่าคำถามนี้โบราณ แต่สำหรับผู้ใช้ในอนาคตใด ๆ เธอเป็นต้นแบบดัดแปลงนี้เป็นเพียง micro polyfill สำหรับฟังก์ชั่น. insAfterAfter ที่ไม่ได้มีอยู่ต้นแบบนี้โดยตรงเพิ่มฟังก์ชั่นใหม่baseElement.insertAfter(element);ต้นแบบธาตุ:

Element.prototype.insertAfter = function(new) {
    this.parentNode.insertBefore(new, this.nextSibling);
}

เมื่อคุณวางโปลิฟิลในห้องสมุดส่วนสำคัญหรือเพียงแค่ในรหัสของคุณ (หรือที่ใดก็ได้ที่สามารถอ้างอิงได้) เพียงแค่เขียน document.getElementById('foo').insertAfter(document.createElement('bar'));


โซลูชัน 2019 (น่าเกลียดไปที่ 2020)

ใหม่แก้ไข: คุณไม่ควรใช้ PROTOTYPES พวกเขาเขียนทับ codebase เริ่มต้นและ arent มีประสิทธิภาพมากหรือปลอดภัยและอาจทำให้เกิดข้อผิดพลาดในการใช้งานร่วมกันได้ แต่ถ้าสำหรับโครงการที่ไม่ใช่เชิงพาณิชย์ หากคุณต้องการฟังก์ชั่นที่ปลอดภัยสำหรับการใช้งานเชิงพาณิชย์เพียงแค่ใช้ฟังก์ชั่นเริ่มต้น มันไม่สวย แต่ใช้งานได้:

function insertAfter(el, newEl) {
    el.parentNode.insertBefore(newEl, this.nextSibling);
}

// use

const el = document.body || document.querySelector("body");
// the || means "this OR that"

el.insertBefore(document.createElement("div"), el.nextSibling);
// Insert Before

insertAfter(el, document.createElement("div"));
// Insert After 


2563 โซลูชั่น

มาตรฐานเว็บปัจจุบันสำหรับ ChildNode: https://developer.mozilla.org/en-US/docs/Web/API/ChildNode

ปัจจุบันอยู่ในมาตรฐานความเป็นอยู่และปลอดภัย

สำหรับเบราว์เซอร์ที่ไม่รองรับให้ใช้ Polyfill นี้: https://github.com/seznam/JAK/blob/master/lib/polyfills/childNode.js

มีคนพูดถึงว่า Polyfill ใช้ Protos เมื่อฉันบอกว่าพวกเขาปฏิบัติไม่ดี โดยเฉพาะอย่างยิ่งเมื่อใช้อย่างไม่ถูกต้องเช่นโซลูชันของฉันสำหรับปี 2018อย่างไรก็ตามโพลีฟิลนั้นอยู่ในเอกสาร MDN และใช้การเริ่มต้นและการดำเนินการชนิดที่ปลอดภัยยิ่งขึ้น นอกจากนี้สำหรับการสนับสนุนเบราว์เซอร์รุ่นเก่าในวันและอายุที่ Prototype Overwriting ไม่เลวร้ายนัก

วิธีใช้โซลูชัน 2020:

const el = document.querySelector(".class");

// Create New Element
const newEl = document.createElement("div");
newEl.id = "foo";

// Insert New Element BEFORE
el.before(newEl);

// Insert New Element AFTER
el.after(newEl);

// Remove Element
el.remove();

// Remove Child
newEl.remove(); // This one wasnt tested but should work


5

ขั้นตอนที่ 1 เตรียมองค์ประกอบ:

var element = document.getElementById('ElementToAppendAfter');
var newElement = document.createElement('div');
var elementParent = element.parentNode;

ขั้นตอนที่ 2 ผนวกหลังจาก:

elementParent.insertBefore(newElement, element.nextSibling);

3

insertBefore วิธี () parentNode.insertBefore()ถูกนำมาใช้เช่น ดังนั้นเพื่อเลียนแบบและสร้างวิธีการที่parentNode.insertAfter()เราสามารถเขียนโค้ดต่อไปนี้

JavaScript

Node.prototype.insertAfter = function(newNode, referenceNode) {
    return referenceNode.parentNode.insertBefore(
        newNode, referenceNode.nextSibling); // based on karim79's solution
};

// getting required handles
var refElem = document.getElementById("pTwo");
var parent = refElem.parentNode;

// creating <p>paragraph three</p>
var txt = document.createTextNode("paragraph three");
var paragraph = document.createElement("p");
paragraph.appendChild(txt);

// now we can call it the same way as insertBefore()
parent.insertAfter(paragraph, refElem);

HTML

<div id="divOne">
    <p id="pOne">paragraph one</p>
    <p id="pTwo">paragraph two</p>
</div>

ทราบว่าการขยาย DOM อาจจะไม่ได้ทางออกที่เหมาะสมสำหรับคุณตามที่ระบุไว้ในบทความนี้

Hovewer บทความนี้เขียนขึ้นในปี 2010 และสิ่งต่างๆอาจแตกต่างไปในขณะนี้ ดังนั้นตัดสินใจด้วยตัวคุณเอง

JavaScript DOM insertAfter () วิธีการ @ jsfiddle.net


2

จะเป็นการดีที่insertAfterควรจะทำงานคล้ายกับinsertBefore รหัสด้านล่างจะทำงานดังต่อไปนี้:

  • หากไม่มีลูกใหม่Nodeจะถูกต่อท้าย
  • หากไม่มีการอ้างอิงNodeใหม่Nodeจะถูกผนวกเข้า
  • หากไม่มีNodeหลังจากการอ้างอิงจะมีการผนวกNodeใหม่Node
  • หากมีการอ้างอิงที่Nodeมีพี่น้องหลังจากนั้นใหม่Nodeจะถูกแทรกก่อนที่พี่น้อง
  • ส่งคืนใหม่ Node

ขยาย Node

Node.prototype.insertAfter = function(node, referenceNode) {

    if (node)
        this.insertBefore(node, referenceNode && referenceNode.nextSibling);

    return node;
};

หนึ่งตัวอย่างทั่วไป

node.parentNode.insertAfter(newNode, node);

ดูรหัสที่ใช้


2

ฉันรู้ว่าคำถามนี้มีคำตอบมากมายเหลือเกินแล้ว แต่ก็ไม่มีใครตอบสนองความต้องการที่แน่นอนของฉันได้

ฉันต้องการฟังก์ชั่นที่มีพฤติกรรมตรงข้ามแน่นอนparentNode.insertBefore - นั่นคือต้องยอมรับ null referenceNode(ซึ่งคำตอบที่ยอมรับไม่ได้) และตำแหน่งที่insertBeforeจะแทรกที่ส่วนท้ายของเด็ก ๆ สิ่งนี้ต้องแทรกในตอนเริ่มต้นเพราะมิฉะนั้นจะมี ' d ไม่มีวิธีแทรกที่ตำแหน่งเริ่มต้นด้วยฟังก์ชันนี้เลย; insertBeforeแทรกเหตุผลเดียวกันในตอนท้าย

เนื่องจาก null referenceNodeจำเป็นต้องให้คุณระบุตำแหน่งพาเรนต์เราจึงจำเป็นต้องรู้พาเรนต์ - insertBeforeเป็นวิธีการของparentNodeดังนั้นจึงสามารถเข้าถึงพาเรนต์ด้วยวิธีนั้น ฟังก์ชั่นของเราไม่ได้ดังนั้นเราจะต้องผ่านผู้ปกครองเป็นพารามิเตอร์

ฟังก์ชั่นที่ได้จะเป็นดังนี้:

function insertAfter(parentNode, newNode, referenceNode) {
  parentNode.insertBefore(
    newNode,
    referenceNode ? referenceNode.nextSibling : parentNode.firstChild
  );
}

หรือ (ถ้าคุณต้องฉันไม่แนะนำ) คุณสามารถปรับปรุงNodeต้นแบบ:

if (! Node.prototype.insertAfter) {
  Node.prototype.insertAfter = function(newNode, referenceNode) {
    this.insertBefore(
      newNode,
      referenceNode ? referenceNode.nextSibling : this.firstChild
    );
  };
}

0

รหัสนี้ใช้เพื่อแทรกรายการลิงก์หลังจากชายด์ที่มีอยู่ล่าสุดเพื่อฝังไฟล์ css ขนาดเล็ก

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

0

คุณสามารถใช้appendChildฟังก์ชั่นเพื่อแทรกหลังจากองค์ประกอบ

การอ้างอิง: http://www.w3schools.com/jsref/met_node_appendchild.asp


โซลูชันนี้ใช้งานไม่ได้สำหรับแท็ก 2 p .. คุณไม่สามารถเพิ่มแท็ก ap หลังจากแท็ก p อื่นด้วยฟังก์ชั่นนี้ ..
Mehregan Rahmani

0

การใช้งานที่มีประสิทธิภาพของ 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'."));

};


เพิ่มคำอธิบายพร้อมคำตอบสำหรับวิธีที่คำตอบนี้ช่วย OP ในการแก้ไขปัญหาปัจจุบัน
Kяσѕρєя K

เรียกใช้รหัสด้านบนจากนั้นคุณสามารถแทรก newNode หลังจากการอ้างอิง Node ที่ระบุ
jszhou

0

ให้จัดการกับสถานการณ์ทั้งหมด

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

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

0

จริงๆแล้วคุณสามารถใช้วิธีการที่เรียกว่าafter()ใน Chrome, Firefox และ Opera เวอร์ชันใหม่ ข้อเสียของวิธีนี้คือ Internet Explorer ยังไม่รองรับ

ตัวอย่าง:

// You could create a simple node
var node = document.createElement('p')

// And then get the node where you want to append the created node after
var existingNode = document.getElementById('id_of_the_element')

// Finally you can append the created node to the exisitingNode
existingNode.after(node)

รหัส HTML ง่ายๆที่จะทดสอบนั่นคือ:

<!DOCTYPE html>
<html>
<body>
     <p id='up'>Up</p>
    <p id="down">Down</p>
  <button id="switchBtn" onclick="switch_place()">Switch place</button>
  <script>
    function switch_place(){
      var downElement = document.getElementById("down")
      var upElement = document.getElementById("up")
      downElement.after(upElement);
      document.getElementById('switchBtn').innerHTML = "Switched!"
    }
  </script>
</body>
</html>

ตามที่คาดไว้มันจะย้ายองค์ประกอบขึ้นหลังจากองค์ประกอบลง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.