Por lo que entiendo respuesta @Michal 's es vulnerable to XXS attacks(using innerHTML is a security vulnerability)Here is another link on this.
Hay muchas maneras de hacer esto, 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);
Esto funciona bien. Sin embargo, a veces, solo quiero envolver partes de un elemento. Así que modifiqué la función a esto:
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);
Espero que esto ayude.
Eso funcionó perfectamente, y fue lo suficientemente simple como para que incluso yo lo entendiera. Gracias. – Squadrons
@Squadrons: ¿También está usando jQuery? Si es así, realmente no deberías hacer esto. (Incluso si no lo eres, estás destruyendo y recreando innecesariamente esta parte del DOM.) – user113716
No estoy usando jquery. Estoy tratando de sentirme un poco cómodo con JS antes de pasar a un marco. Estoy probando todas las respuestas en este hilo, sin embargo. ¿Recomiendas la respuesta de aroth? Si es así, ¿por qué sobre este? – Squadrons