2012-01-29 76 views
10

Tôi đang cố gắng lấy giá trị của ô bảng.Nhận giá trị của nhiều phần tử với Jquery

Ví dụ

<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> 

Tôi muốn nhận aaaaa, bbbbb, ccccc, eeeee, ddddd và asign họ mảng của tôi

Tôi tin rằng tôi có thể nhận được giá trị với mã jquery của tôi dưới đây

$(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(); 

    }) 
}); 

Tuy nhiên, tôi nghĩ rằng nó không phải là rất duy trì và mất rất nhiều mã nếu tôi có 20 thẻ. Tôi đã tự hỏi nếu tôi có thể làm điều đó với .each hoặc bất kỳ cách nào tốt hơn để lưu trữ này. Cảm ơn đã giúp đỡ.

Trả lời

11

Bạn có thể làm một cái gì đó như dưới đây,

var tableVal= []; 

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

Lưu ý: :eq(0) - có nghĩa là hàng 1 .. Sửa đổi phù hợp nếu bạn muốn làm cho tất cả các hàng hoặc cho tôi biết nếu bạn cần giúp đỡ với điều đó.

+0

vâng tôi cần một mảng kết hợp và câu trả lời của bạn là hoàn hảo cho tôi. Tôi không hiểu các purposed của '(index)' trong mã của bạn mặc dù. Bạn sẽ giải thích? Cảm ơn. – FlyingCat

+0

Bạn không cần hàm (chỉ mục) ở đó. –

+0

bản đồ ngắn gọn hơn – pstanton

7

Có, bạn có thể :).

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

Hãy nhớ sử dụng đối tượng thay vì mảng nếu phím của bạn không phải là số.

+0

Cảm ơn, SKS nhanh hơn nên tôi đã trả lời cho anh ấy. +1. – FlyingCat

29

Nếu bạn thực sự muốn có một mảng, hãy sử dụng .map() với .toArray().

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

Nếu không, nếu bạn thực sự sử dụng các chỉ số không phải số, bạn muốn một đối tượng, sử dụng các kỹ thuật trong câu trả lời khác.

+0

+1 - câu trả lời hay :) .. Tuy nhiên OP muốn cái gì đó như tableVal ['a'] .. không phải là bản đồ trả lại cho bạn một nó? đúng nếu tôi đã sai lầm. –

+0

OP muốn một mảng kết hợp .. Trong trường hợp của bạn, tôi nghĩ tableVal ['a'] sẽ không được xác định. –

+0

@ SKS: Vâng, câu trả lời của bạn sẽ là cách để làm điều đó. +1 lên đó. :) –

2

Hãy thử:

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

Thứ nhất, cung cấp cho bạn tr một id:

<tr id="rowToGetDataFrom"> 

Sau đó, bạn có thể nhận được các mảng bạn muốn như thế này:

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

Demo: http://jsfiddle.net/alecgorge/3ApnB/

+0

tableVal ['a'] = undefined. OP muốn bảngVal ['a'] = 'aaaaa'. Bản đồ dịch tất cả các mục trong một mảng hoặc đối tượng thành mảng các mục mới. OP muốn một mảng kết hợp. –

Các vấn đề liên quan