JQuery: как выбрать строки из таблицы - PullRequest
4 голосов
/ 27 августа 2010

У меня есть сценарий, в котором я хотел бы выбрать строки из таблицы в зависимости от значений в td

например, у меня есть таблица, подобная этой

<tr>
   <td>John</td>
   <td>Smith</td>
   <td>Male</td>
</tr>
<tr>
   <td>Andy</td>
   <td>Gates</td>
   <td>Male</td>
</tr>
<tr>
   <td>Alice</td>
   <td>Nixon</td>
   <td>Female</td>
</tr>

, теперь я хотел бывыберите все строки, если значение первого td равно x AND значение второго td равно y

В данный момент я делаю что-то вроде этого

$("tr").each(function (index) {
   if ($(this).find('td:eq(0)').text().trim() == x &&
       $(this).find('td:eq(1)').text().trim() == y)
          ...do somethin....
}); 

loopingчерез каждый ряд и проверить.Это многословно.Есть ли лучший способ добиться этого в одной строке.Кажется, я не могу понять логику оператора И с селекторами?

Ожидание,

Ответы [ 3 ]

6 голосов
/ 27 августа 2010
$("tr").each(function (index) {
   if ($.trim($(this).find('td:eq(0)').text()) == x &&
       $.trim($(this).find('td:eq(1)').text()) == y) {
       $(this).closest('table').css('border', '1px solid red');​ // this should do it
   }
}); 

В качестве альтернативы, используя .filter:

$("tr").filter(function() {
    return $.trim($(this).find('td:eq(0)').text()) == 'John' &&
           $.trim($(this).find('td:eq(1)').text()) == 'Smith';
}).closest('table').find('tr').css('border', '1px solid red');​

Демо: http://jsfiddle.net/WhFbE/5/

3 голосов
/ 27 августа 2010

Вот селектор, который должен работать:

Попробуйте: http://jsfiddle.net/N6TdM/

var x = "Andy";
var y = "Gates";

var res = $("td:first-child:contains(" + x + ") + td:contains(" + y + ")");

Обратите внимание, что этот может потерпеть неудачу, еслиу вас есть что-то вроде следующего:

FIRST:   Roberto       Rob
SECOND:  Robertson     Roberts

Поиск «Роб Робертс» даст два совпадения.

1 голос
/ 27 августа 2010

Вы можете использовать нативное свойство DOM cells в HTMLTableRowElement для прямого доступа к ячейкам, вместо того, чтобы отправлять jQuery в обходное путешествие со списком всех дочерних ячеек и выбирать одну с нестандартным:eq селектор.

$('tr').each(function (index) {
    if (
        $(this.cells[0]).text().trim()===x &&
        $(this.cells[1]).text().trim()===y
    ) {
        ...
    }
});

, хотя это, вероятно, не будет иметь существенного влияния на производительность.Другой подход заключается в простом поддержании массива массивов, содержащих предварительно усеченные данные, для сохранения даже при взгляде на DOM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...