ฉันต้องการแทนที่องค์ประกอบใน DOM
ตัวอย่างเช่นมี<a>
องค์ประกอบที่ฉันต้องการแทนที่ด้วย<span>
แทน
ฉันจะไปและทำอย่างนั้นได้อย่างไร
ฉันต้องการแทนที่องค์ประกอบใน DOM
ตัวอย่างเช่นมี<a>
องค์ประกอบที่ฉันต้องการแทนที่ด้วย<span>
แทน
ฉันจะไปและทำอย่างนั้นได้อย่างไร
คำตอบ:
โดยใช้replaceChild () :
<html>
<head>
</head>
<body>
<div>
<a id="myAnchor" href="http://www.stackoverflow.com">StackOverflow</a>
</div>
<script type="text/JavaScript">
var myAnchor = document.getElementById("myAnchor");
var mySpan = document.createElement("span");
mySpan.innerHTML = "replaced anchor!";
myAnchor.parentNode.replaceChild(mySpan, myAnchor);
</script>
</body>
</html>
var a = A.parentNode.replaceChild(document.createElement("span"), A);
a คือองค์ประกอบ A ที่ถูกแทนที่
A.replaceWith(span)
- ไม่ต้องใช้พาเรนต์แบบฟอร์มทั่วไป:
target.replaceWith(element);
วิธีที่ดีกว่า / สะอาดกว่าวิธีก่อนหน้า
สำหรับกรณีการใช้งานของคุณ:
A.replaceWith(span);
เบราว์เซอร์ที่รองรับ - 94% เม.ย. 2020
คำถามนี้เก่ามาก แต่ฉันพบว่าตัวเองกำลังศึกษาเพื่อรับใบรับรอง Microsoft และในหนังสือการศึกษาแนะนำให้ใช้:
oldElement.replaceNode(newElement)
ฉันค้นหามันและดูเหมือนว่าจะรองรับเฉพาะใน IE Doh ..
ฉันคิดว่าฉันจะเพิ่มที่นี่เป็นบันทึกด้านตลก;)
ฉันมีปัญหาที่คล้ายกันและพบกระทู้นี้ การแทนที่ไม่ได้ผลสำหรับฉันและการดำเนินการโดยผู้ปกครองนั้นยากสำหรับสถานการณ์ของฉัน Inner Html แทนที่เด็ก ๆ ซึ่งไม่ใช่สิ่งที่ฉันต้องการ การใช้ outerHTML ทำให้งานเสร็จ หวังว่านี่จะช่วยคนอื่นได้!
currEl = <div>hello</div>
newElem = <span>Goodbye</span>
currEl.outerHTML = newElem
# currEl = <span>Goodbye</span>
คุณสามารถแทนที่ Node โดยใช้ Node.replaceWith(newNode)
คุณสามารถแทนที่โหนดที่ใช้
ตัวอย่างนี้ควรเก็บแอตทริบิวต์และลูกทั้งหมดจากโหนดต้นทาง:
const links = document.querySelectorAll('a')
links.forEach(link => {
const replacement = document.createElement('span')
// copy attributes
for (let i = 0; i < link.attributes.length; i++) {
const attr = link.attributes[i]
replacement.setAttribute(attr.name, attr.value)
}
// copy content
replacement.innerHTML = link.innerHTML
// or you can use appendChild instead
// link.childNodes.forEach(node => replacement.appendChild(node))
link.replaceWith(replacement)
})
ตัวอย่างการแทนที่องค์ประกอบ LI
function (element) {
let li = element.parentElement;
let ul = li.parentNode;
if (li.nextSibling.nodeName === 'LI') {
let li_replaced = ul.replaceChild(li, li.nextSibling);
ul.insertBefore(li_replaced, li);
}
}
ให้ตัวเลือกที่เสนอมาแล้วทางออกที่ง่ายที่สุดโดยไม่ต้องค้นหาผู้ปกครอง:
var parent = document.createElement("div");
var child = parent.appendChild(document.createElement("a"));
var span = document.createElement("span");
// for IE
if("replaceNode" in child)
child.replaceNode(span);
// for other browsers
if("replaceWith" in child)
child.replaceWith(span);
console.log(parent.outerHTML);
target.replaceWith(element);
เป็นวิธีการที่ทันสมัย (ES5 +) ในการทำเช่นนี้