He escrito el siguiente código, que debería reemplazar un valor que se evalúe como 0 o 1 dentro del bucle for. Pero solo cambia cada segundo elemento en la tabla al elemento de cambio correspondiente. ¿Qué estoy haciendo mal aquí? Probé el código con $("td[headers='blub']").eq(i).text("false") \.text("true") y cambió todos los valores correctamente... así que tiene algo que ver con el niño adjunto ... También traté de eliminar al niño después de cada iteración, pero no funcionó correctamente
var length = $("td[headers='blub']").text().length; for (var i = 0; i <= length; i++) { if ($("td[headers='blub']").eq(i).text() == 1) { let la = document.createElement("LABEL"); la.className = "switch"; let x = document.createElement("INPUT"); x.setAttribute("type", "checkbox"); let sp = document.createElement("SPAN"); sp.className = "slider round"; x.checked = true; la.appendChild(x); la.appendChild(sp); $("td[headers='blub']").eq(i).replaceWith(la); } else { let la = document.createElement("LABEL"); la.className = "switch"; let x = document.createElement("INPUT"); x.setAttribute("type", "checkbox"); let sp = document.createElement("SPAN"); sp.className = "slider round"; x.checked = false; la.appendChild(x); la.appendChild(sp); $("td[headers='blub']").eq(i).replaceWith(la); } } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>Hay varios problemas:
length se establece en la longitud de una cadena , no en el número de elementos DOM coincidentes.for debe ir a < length , no <= lengthtd con otra cosa, por lo que reduce la cantidad de coincidencias con $("td[headers='blub']") haciendo que .eq(i) omita el siguiente elemento que esperaba Llegar.td con otros tipos de elementos generará HTML no válido. Debería mantener los elementos td y cambiar su contenido en su lugar.Esto es lo que sugeriría:
$("td[headers='blub']").each(function () { let checked = $(this).text().trim() == "1"; $(this).text("").append( $("<label>").addClass("switch").append( $("<input>", { type: "checkbox", checked }), $("<span>").addClass("slider round") ) ); });