Tengo el siguiente código:

$(document).ready(function () {
    debugger;

    // Empty aarray to store list of headings
    var tableHeadings = [];

    // For each heading present add it to the array (ordered)
    $('#AdvancedTable thead > tr > th').each(function () {
        //console.log($(this).text());
        $(tableHeadings).add($(this).text());
    });

    // For each row in the table, add the heading text to the start of each cell
    $('#AdvancedTable tbody > tr > td').each(function (index) {
        $(this).prepend('<span class="visible-xs">' + tableHeadings[index] + '</span>');
    })

});

Sin embargo, uno de los encabezados de mi tabla donde estoy almacenando valores contiene el texto "Longitud (L1)". Me sale el siguiente error en mi consola:

Error no capturado: error de sintaxis, expresión reconocida: longitud (L1)

Entiendo lo básico que esto se debe a que hay problemas con el texto que pasa algo entre corchetes, pero me gustaría saber los detalles de por qué sucede esto y una pista sobre cómo puedo resolver esta / mejores prácticas para evitar un error como esta.

0
Felipe Warrener-Iglesias 27 oct. 2017 a las 17:52

4 respuestas

La mejor respuesta

Use map en lugar de each.

// Empty aarray to store list of headings
    var tableHeadings = $('#AdvancedTable thead > tr > th').map(function () {
      return this.innerHTML;
    }).get();

Está creando una matriz vacía, iterando sobre elementos y agregándolos a una matriz. Esto es esencialmente reinventar la rueda para lo que el mapa ya hace.

3
Taplar 27 oct. 2017 a las 14:59
 $(tableHeadings).add($(this).text());

Necesitan ser tableHeadings.push($(this).text())

0
Joaquin Javi 27 oct. 2017 a las 14:58

TableHeadings es una matriz simple, por lo que puede usar la función push para agregar valor:

$(document).ready(function () {    
    let tableHeadings = [];

    $('#AdvancedTable thead > tr > th').each( (index, item) => {
       tableHeadings.push($(item).text())
    });

    $('#AdvancedTable tbody > tr > td').each( (index, item) => {
        $(item).prepend('<span class="visible-xs">' + tableHeadings[index] + '</span>');
    })
});
3
Anjello 28 oct. 2017 a las 23:31

No estoy seguro de por qué está utilizando JQuery para agregar un elemento a una lista; tal vez intente:

tableHeadings.push($(this).text());

En lugar de la línea original:

$(tableHeadings).add($(this).text());
0
Vexen Crabtree 27 oct. 2017 a las 14:58