Từ những gì tôi hiểu câu trả lời @Michal 's là vulnerable to XXS attacks(using innerHTML is a security vulnerability)Here is another link on this.
Có rất nhiều cách để làm điều này, one that I found and liked is:
function wrap_single(el, wrapper) {
el.parentNode.insertBefore(wrapper, el);
wrapper.appendChild(el);
}
let divWrapper;
let elementToWrap;
elementToWrap = document.querySelector('selector');
// wrapping the event form in a row
divWrapper = document.createElement('div');
divWrapper.className = 'row';
wrap_single(elementToWrap, divWrapper);
này hoạt động tốt. Tuy nhiên đối với tôi, đôi khi tôi chỉ muốn bọc các phần của một nguyên tố. Vì vậy, tôi đã sửa đổi chức năng này:
function wrap_some_children(el, wrapper, counter) {
el.parentNode.insertBefore(wrapper, el);
if (! counter) {
counter = el.childNodes.length;
}
for(i = 0; i < counter; i++) {
wrapper.appendChild(el.childNodes[0]);
}
}
// wrapping parts of the event form into columns
let divCol1;
let divCol2;
// the elements to wrap
elementToWrap = document.querySelector('selector');
// creating elements to wrap with
divCol1 = document.createElement('div');
divCol1.className = 'col-sm-6';
divCol2 = document.createElement('div');
divCol2.className = 'col-sm-6';
// for the first column
wrap_some_children(elementToWrap, divCol1, 13); // only wraps the first 13 child nodes
// for the second column
wrap_some_children(elementToWrap, divCol2);
Tôi hy vọng điều này sẽ hữu ích.
Điều đó hoạt động hoàn hảo và đủ đơn giản để tôi hiểu được. Cảm ơn bạn. – Squadrons
@Squadrons: Bạn cũng đang sử dụng jQuery? Nếu vậy, bạn thực sự không nên làm điều này. (Ngay cả khi bạn không, bạn đang phá hủy và tái tạo phần này của DOM không cần thiết.) – user113716
Tôi không sử dụng jquery. Tôi đang cố gắng để có được phần nào thoải mái với JS trước khi tôi chuyển sang một khuôn khổ. Tôi đang thử tất cả các câu trả lời trong chủ đề này, tuy nhiên. Bạn có đề nghị câu trả lời của aroth không? Nếu vậy, tại sao lại là cái này? – Squadrons