2010-05-22 87 views
3

說我有這個有沒有更好的方法從表格行中獲取值?

<table border="1" id="tbl"> 
<tr> 
<td><input type="checkbox" name="vehicle" value="Bike" /></td> 
<td>row 1, cell 1</td> 
<td>row 1, cell 2</td> 
</tr> 
<tr> 
<td><input type="checkbox" name="vehicle" value="Bike" /></td> 
<td>row 2, cell 1</td> 
<td>row 2, cell 2</td> 
</tr> 
</table> 

現在我想的是被選中的行,那麼該單元格值檢查行。所以我會這樣做

var cells = $('#tbl :checked').parents('tr').children('td'); 

因此,讓我們假設只有一個複選框可以檢查(所以沒有jQuery foreach循環)。

所以現在說我想獲得第二個表格單元格的值我只想去

var secondCell = $(cells[1]).html(); 

事情與這雖然它使代碼很脆。就像我在複選框之後放置另一個表格單元格一樣?

<table border="1" id="tbl"> 
<tr> 
<td><input type="checkbox" name="vehicle" value="Bike" /></td> 
    <td> I am new </td> 
    <td>row 1, cell 1</td> 
    <td>row 1, cell 2</td> 
</tr> 
<tr> 
<td><input type="checkbox" name="vehicle" value="Bike" /></td> 
    <td> I am new </td> 
    <td>row 2, cell 1</td> 
    <td>row 2, cell 2</td> 
</tr> 
</table> 

所以現在我必須去通過我的代碼,並再更改此

var secondCell = $(cells[1]).html(); 

這個

var thirdCell = $(cells[2]).html(); 

因爲現在我的第三個單元格後,我其實並沒有第二小區。

那麼還有更好的方法嗎?

感謝

回答

3

給這個td S的權益類名,這樣就可以使用類名選擇器中選擇它們。

<tr> 
    <td><input type="checkbox" name="vehicle" value="Bike" /></td> 
    <td> I am new </td> 
    <td class="cell1">row 1, cell 1</td> 
    <td class="cell2">row 1, cell 2</td> 
</tr> 

var row = $('#tbl :checked').parents('tr'); 
var cell1 = $('.cell1', row); 
var cell2 = $('.cell2', row); 

你可能也寧願用text(),以獲取其內容。 html()會返回任何包含的HTML,這可能不符合您的興趣。

您是否考慮過使用<input type="radio">強制進行單個選擇?如果你給他們所有相同的name,那麼他們屬於同一個單選組。

+0

我想的是類似的東西,但不知道該怎麼辦它。我想我會試試你的方式。雅我可能應該使用文本,但我追求一個隱藏的單元格字段,我設置所以沒有意外應該發生。 – chobo2 2010-05-22 05:23:25

+0

你認爲我有多大的速度差異嗎?因爲你基本上必須去檢查那一行X次以獲取值。 – chobo2 2010-05-22 19:05:03

0

我喜歡@BalusC的答案,並建議你使用它,但如果由於某種原因你不能這樣做,爲什麼不使用全局常量?

var PRICE_ROW = 1; 
var AMOUNT_ROW = 2; 

$(cells[PRICE_ROW]).html(); 

另一種替代方法可能包括在使用前將行轉換爲名稱爲鍵的JavaScript對象。

+0

雅我在想你的方式和BalusC。你是什​​麼意思將行轉換爲JavaScript對象?你是怎樣做的? – chobo2 2010-05-22 05:22:12

+0

@ chobo2,只需寫一個簡單的JS函數convertRow($('#tbl:checked')。parents('tr')。children('td')) - > {name:「Bill Gates」,company: 「微軟」}「,每當你想用行來做某件事時就使用它。然後,無論你的表格如何變化,你只需要修復代碼中的一個地方,剩下的就會使用普通的javascript對象。它也非常適合測試目的:) – vava 2010-05-22 09:52:19

+0

我仍然不明白。它如何轉換行? – chobo2 2010-05-22 18:42:20

0

前幾天我經歷了同樣的事情,我有一張表格,裏面裝滿了我需要從單元格值中提取客戶端評估的複選框。這是我想出來的。

// Find all the checked checkboxes in a table 
var CheckedCheckBoxes = $('#tbl').find("input[type='checkbox']:checked"); 

// Loop over all the checked checkboxes, and pull in the value from the 'td' item I select 
CheckedCheckBoxes.each(function() { 
    var cellValue = $(this).parent().parent().find('td:eq(2)').text(); 
} 

我敢肯定你需要家長()。父(),因爲該複選框處於TD是在TR,你需要去的TR搜索的TD(細胞)你想要的。

0

回覆您對BalusC的回答...

如果你是隱藏單元格需要額外的信息,然後用上面的腳本檢索它。我認爲使用自定義的data-屬性(ref)將您需要的數據添加到輸入本身會更高效。例如:

<table border="1" id="tbl"> 
<tr> 
    <td><input type="checkbox" name="vehicle" value="Bike" data-extra="some extra data stored here instead of in a hidden table cell" data-price="250" /></td> 
    <td> I am new </td> 
    <td>row 1, cell 1 (this cell is hidden)</td> 
    <td>row 1, cell 2 (this cell is hidden)</td> 
</tr> 
<tr> 
    <td><input type="checkbox" name="vehicle" value="Bike" data-extra="some extra data" data-price="300"/></td> 
    <td> I am new </td> 
    <td>row 2, cell 1 (this cell is hidden)</td> 
    <td>row 2, cell 2 (this cell is hidden)</td> 
</tr> 
</table> 

然後,你可以只使用這個腳本(因爲你只說了一個複選框同時覈對):

var cell = $('#tbl :checked').attr('data-extra'); 
+0

這不會使我的html失敗w3c標準驗證? – chobo2 2010-05-22 18:01:25

+0

是的,我不認爲它會驗證(但我不是100%確定)。您還可以將信息作爲元數據添加到類屬性中,然後使用jQuery.metadata插件(http://github.com/jquery/jquery-metadata) – Mottie 2010-05-22 22:35:32

相關問題