Tôi đang tìm cách thay thế một phần tử trong DOM.
Ví dụ, có một <a>
yếu tố mà tôi muốn thay thế bằng một <span>
thay thế.
Làm thế nào tôi sẽ đi và làm điều đó?
Tôi đang tìm cách thay thế một phần tử trong DOM.
Ví dụ, có một <a>
yếu tố mà tôi muốn thay thế bằng một <span>
thay thế.
Làm thế nào tôi sẽ đi và làm điều đó?
Câu trả lời:
bằng cách sử dụng thayChild () :
<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 là phần tử A được thay thế.
A.replaceWith(span)
- Không cần cha mẹHình thức chung:
target.replaceWith(element);
Cách tốt hơn / sạch hơn phương pháp trước.
Đối với trường hợp sử dụng của bạn:
A.replaceWith(span);
Trình duyệt được hỗ trợ - 94% tháng 4 năm 2020
Câu hỏi này rất cũ, nhưng tôi thấy mình đang học Chứng nhận Microsoft và trong cuốn sách nghiên cứu, nó đã được đề xuất sử dụng:
oldElement.replaceNode(newElement)
Tôi đã tra cứu nó và dường như nó chỉ được hỗ trợ trong IE. Đừng ..
Tôi nghĩ rằng tôi chỉ cần thêm nó ở đây như là một ghi chú bên vui;)
Tôi đã có một vấn đề tương tự và tìm thấy chủ đề này. Thay thế đã không làm việc cho tôi, và đi bởi cha mẹ là khó khăn cho tình huống của tôi. Html bên trong đã thay thế những đứa trẻ, đó cũng không phải là điều tôi muốn. Sử dụng bên ngoàiHTML đã hoàn thành công việc. Hy vọng điều này sẽ giúp người khác!
currEl = <div>hello</div>
newElem = <span>Goodbye</span>
currEl.outerHTML = newElem
# currEl = <span>Goodbye</span>
Bạn có thể thay thế một nút bằng cách sử dụng Node.replaceWith(newNode)
.
Ví dụ này sẽ giữ tất cả các thuộc tính và con từ nút gốc:
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)
})
Đưa ra các tùy chọn đã được đề xuất là giải pháp đơn giản nhất mà không cần tìm cha mẹ:
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);
là cách hiện đại (ES5 +) để làm điều này