2012-01-29 27 views
10

Estoy tratando de obtener el valor de una celda de tabla.Obtener valor de elementos múltiples con Jquery

Por ejemplo

<table id='projects'> 

     <tr> 
     <td id='a'>aaaaa</td> 
     <td id='b'>bbbbb</td> 
     <td id='c'>ccccc</td> 
     <td id='d'>eeeee</td> 
     <td id='e'>ddddd</td> 
     </tr> 
</table> 
<a id='test' href='#'>test </a> 

quiero conseguir aaaaa, bbbbb, CCCCC, eeeee, ddddd y asign a mi arsenal

Creo que puedo obtener el valor con mi código de jQuery continuación

$(document).ready(function(){ 
    $('#test').click(function(){ 
    var tableVal=new Array(); 
    tableVal['a']=$('#a').text(); 
    tableVal['b']=$('#b').text(); 
    tableVal['c']=$('#c').text(); 
    tableVal['d']=$('#d').text(); 
    tableVal['e']=$('#e').text(); 

    }) 
}); 

Sin embargo, creo que no es muy fácil de mantener y tomar un montón de código si tengo 20 etiquetas. Me preguntaba si puedo hacerlo con .each o cualquier otra forma mejor de archivar esto. Gracias por la ayuda.

Respuesta

11

Usted puede hacer algo, como a continuación,

var tableVal= []; 

$('#projects tr:eq(0) td').each (function() { 
    tableVal[this.id] = $(this).text(); 
}); 

Nota: :eq(0) - significa primera fila .. modificar, en consecuencia, si usted quiere hacer para todas las filas o que me haga saber si necesita ayuda con eso.

+0

sí, sí necesito una matriz asociativa y tu respuesta es perfecta para mí. Sin embargo, no entiendo el propósito de '(índice)' en tu código. ¿Podrías explicarme? Gracias. – FlyingCat

+0

No necesita la función (índice) allí. –

+0

mapa es más sucinto – pstanton

7

Sí, puedes :).

var tableVals= {} 
$('#projects td').each(function() { 
    tableVals[$(this).attr('id')] = $(this).text(); 
}); 

Por favor, recuerde usar object en lugar de array si sus claves no son numéricas.

+0

Gracias, SKS es más rápido, así que le di mi respuesta. +1. – FlyingCat

29

Si realmente quiere una matriz, use .map() con .toArray().

var tableVal = $('#projects td').map(function(i,v) { 
    return $(this).text(); 
}).toArray(); 

De lo contrario, si usted está realmente va a utilizar índices no numéricos, desea que un objeto, utilizando las técnicas en las otras respuestas.

+0

+1 - buena respuesta :) .. Sin embargo, OP quiere algo como tableVal ['a'] .. ¿no es el mapa lo que te devuelve? corrígeme si estoy equivocado. –

+0

OP quiere una matriz asociativa ... En su caso, creo que tableVal ['a'] no estará definido. –

+0

@SKS: Sí, su respuesta sería la forma de hacerlo. +1 allá arriba. :) –

2

Probar:

var tableVal = []; 
$('#test').click(
    function(){ 
     $('#projects td').each(
      function(){ 
        tableVal.push($(this).text()); 
      }); 
    }); 
5

En primer lugar, dar a su tr un id:

<tr id="rowToGetDataFrom"> 

A continuación, se puede obtener la matriz que desea de esta manera:

var tableVal = $('#rowToGetDataFrom td').map(function() { return $(this).text(); }); 

Demostración: http://jsfiddle.net/alecgorge/3ApnB/

+0

tableVal ['a'] = undefined. OP quiere tableVal ['a'] = 'aaaaa'. El mapa traduce todos los elementos de una matriz u objeto a una nueva matriz de elementos. OP quiere una matriz asociativa. –

Cuestiones relacionadas