Tengo una función de JavaScript:
function addcontent(ele, text, lines, separate_lines){ if(separate_lines){ for(i=0; i<lines; i++){ text=text+"\n"+text+"\n"; } } else if(!separate_lines){ for(e=0; e<lines; e++){ text=text+text; } } ele.append(text); }y cuando lo uso para hacer clic en un botón HTML como:
<button onclick="addcontent(document.body, 'A', 100, true)"> Add content. </button>Recibo este error en la consola de Chrome cuando hago clic en el botón:
RangeError no capturado: longitud de cadena no válida en addcontent en HTMLButtonElement.onclick
No tengo idea de dónde me equivoco.
El problema es que en cada iteración agrega el text dos veces, pero asigna el resultado al text nuevamente.
text ) entoncesEntonces es exponencial. Básicamente estás haciendo 2 líneas de inserción del texto. Puede adivinar que esto crea una cadena "bastante" grande y no se puede manejar.
Utilice una variable diferente para el texto generado.
function addcontent(ele, text, lines, separate_lines) { let finalText = text; if (separate_lines) { for (let i = 0; i < lines; i++) { finalText = finalText + "\n" + text; } } else { for (let e = 0; e < lines; e++) { finalText = finalText + text; } } ele.append(finalText); } <button onclick="addcontent(document.body, 'A', 100, true)"> Add content. </button>Este problema se puede resolver si puede hacer lo siguiente:
text = (text + "\n").repeat(lines * 2); function addcontent(ele, text, lines, separate_lines) { if (separate_lines) { text = (text + "\n").repeat(lines * 2); } else if (!separate_lines) { for (e = 0; e < lines; e++) { text = text + text; } } ele.append(text); } <button onclick="addcontent(document.body, 'A', 100, true)"> Add content. </button> Si desea agregar una nueva línea después de A
function addcontent(ele, text, lines, separate_lines) { if (separate_lines) { text = `${text}<br>`.repeat(lines * 2); } else if (!separate_lines) { for (e = 0; e < lines; e++) { text = text + text; } } ele.innerHTML = text; } <button onclick="addcontent(document.body, 'A', 100, true)"> Add content. </button>Es el viejo problema del trigo y el tablero de ajedrez , la cuerda es simplemente demasiado larga.
Duplicas la cadena 100 veces, eso es 2^100...
Funciona bien con decir lines = 10