[英]Child appending / DOM ordering JavaScript
<body>
<div class = "order-1-a">
<div class = "order 2-a">
<div class = "order 3-a"></div>
</div>
<div class = "order 2-b"></div>
<div class = "order 2-c"></div>
<div class = "order 2-d"></div>
</div>
<div class = "order-1-b"></div>
</body>
如果我想让div只包装类“ order-2-a” +作为“ class-1-a”的第一个孩子,我应该如何用JavaScript编写div脚本?
最好的选择是:
.createElement()
创建一个新元素。 .appendChild()
将2-a
附加到新元素。 .insertBefore()
在2b
之前插入新元素。 var one_a = document.getElementsByClassName("order-1-a")[0]; var two_a = document.getElementsByClassName("order-2-a")[0]; var two_b = document.getElementsByClassName("order-2-b")[0]; var new_node = document.createElement("div"); new_node.appendChild(two_a); one_a.insertBefore(new_node, two_b); console.log(one_a.innerHTML);
<body> <div class="order-1-a"> <div class="order-2-a"> <div class="order-3-a"></div> </div> <div class="order-2-b"></div> <div class="order-2-c"></div> <div class="order-2-d"></div> </div> <div class="order-1-b"></div> </body>
这提供了您要查找的结构(尽管console.log()
不能很好地显示)。
另外,请注意,类名不能以数字开头,并且可能会产生意外的结果。 在我的示例中,我已经更新了大多数的类,使其从order
开始,与order-1-a
类一样。
希望这可以帮助!
您可以基于选择器创建常规包装功能。 它应该获取主题节点,然后获取其父节点,然后是下一个兄弟节点;如果没有,则为null。
然后创建所需类型的元素,附加主题节点,并将其插入下一个同级之前,如果没有,则插入最后一个节点。
PS。 我已经修改了有效的类名,它们不能以数字开头。
// Wrap element with selector in element with tagName function wrapEl(selector, tagName) { var node = document.querySelector(selector); // If there is no subject node, return if (!node) return; // Get parent and sibling (or null if there isn't one) var parent = node.parentNode; var sibling = node.nextSibling; // Append stuff var wrapper = document.createElement('tagName'); wrapper.textContent = 'inserted wrapper'; // Just to show it's there wrapper.appendChild(node); parent.insertBefore(wrapper, sibling); } window.onload = function() { wrapEl('.order-2-a', 'div'); }
<body> <div class = "order-1-a"> <div class = "order-2-a"> <div class = "order-3-a"></div> </div> <div class = "order-2-b"></div> <div class = "order 2-c"></div> <div class = "order 2-d"></div> </div> <div class = "order-1-b"></div> </body>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.