JSFiddle - React, Tailwind, and code Playground
by iceesong
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
padding: 10px
}
#a{
background-color: #e91e63;
}
#b{
background-color: #00bcd4;
}
#c{
background-color: #ffc107;
}
</style>
</head>
<body>
<div id="a">div1
<span id="a1"> span1</span>
</div>
<div id="b">div2
<span id="b1"> span2</span>
</div>
<div id="c">
ccc
</div>
</body>
<script>
function changeDom(node1, node2) {
if (node1 == node2) {
// 剔除替换为自己的
return new Error('Can\'t change to yourself!')
} else if (isInherit(node1, node2) || isInherit(node2, node1)) {
// 子孙关系不能替换
return new Error('Can\'t change by inherit Elements!')
} else {
// 深度复制 DOM 节点,在 replace 替换
let clone1 = node1.cloneNode(true)
let clone2 = node2.cloneNode(true)
node1.parentNode.replaceChild(clone2, node1)
node2.parentNode.replaceChild(clone1, node2)
}
}
// 判断是否为子孙节点
function isInherit(node1, node2) {
while(node1.parentNode !== node2) {
node1 = node1.parentNode
if(node1.tagName == 'HTML') {
return false
}
}
return true
}
</script>
</html>
JavaScript
changeDom(a, b1)