2010-05-22 3 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 цикла Еогеаспа).

Так что теперь сказать, что я хотел бы получить 2-ое значение ячеек таблицы, я бы просто пойти

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-й ячейки, а не 2-ю ячейку больше ,

Так есть лучший способ?

Благодаря

ответ

3

Дайте td х интерес имя класса, так что вы можете выбрать их с помощью переключателя Classname.

<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

+0

Вы думаете, что есть большая разница в скорости, чем я это делал? Поскольку вы в основном должны пойти и проверить, что строка X раз, чтобы получить значения. – chobo2

0

Мне нравится ответ @BalusC и предлагаю вам использовать его, но если по какой-то причине вы не можете этого сделать, почему бы просто не использовать глобальные константы?

var PRICE_ROW = 1; 
var AMOUNT_ROW = 2; 

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

Другой альтернативой может быть преобразование строк в объекты JavaScript с именами в виде ключей перед использованием.

+0

Ya Я думал о вашем пути и BalusC. Что значит преобразование строк в объекты javascript? Как ты это делаешь? – chobo2

+0

@ chobo2, просто напишите простую функцию JS, 'convertRow ($ ('# tbl: checked'). Parent ('tr'). Children ('td')) -> {name:" Bill Gates ", компания: «Microsoft»} 'и использовать его каждый раз, когда вы хотите что-то делать со строками. Затем, независимо от того, как изменится таблица, вам нужно будет исправить только одно место в коде, а остальная часть будет использовать простой объект javascript. Это также очень полезно для тестирования :) – vava

+0

Я все еще не понимаю. Как это преобразовать строку? – chobo2

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, который находится в тре, и вам нужно, чтобы добраться до тра искать тд (ячейку).

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

+0

Да, я не думаю, что это подтвердит (но я не уверен на 100%). Вы также можете добавить информацию в метаданные в атрибут класса, а затем использовать плагин jQuery.metadata (http://github.com/jquery/jquery-metadata) – Mottie

Смежные вопросы