запустить код для всех строк таблицы jQuery - PullRequest
1 голос
/ 08 июня 2011

Я использую этот код, чтобы скрыть элемент в шестом столбце таблицы при условии (я имею в виду, если текст четвертого столбца таблицы равен «0»).
Но этот код работает только для первой строки таблицы.
Как я могу сделать эту функцию для всех строк целевой таблицы?

if ($('#table  tr  td:eq(4) > span').text() == "0") {
            $('#table  tr  td:eq(6) > .PrintReport').hide();
        }

Ответы [ 5 ]

4 голосов
/ 08 июня 2011

Если бы вы могли опубликовать полную HTML-структуру tr, вы бы получили более оптимизированные решения. Глядя на существующий код, вы можете сделать что-то вроде этого:

$('#table tr').each(function() {
  var text = $('td:eq(4) > span', this).text();

  $('td:eq(6) > .PrintReport', this).toggle(text != '0');
});

Обратите внимание, что внутри цикла я использую this в качестве контекста в селекторах.

РЕДАКТИРОВАТЬ: Объясняя некоторые из приведенного выше кода -

  //This runs the selector in the context of 'this' (the table row)
  //It is functionally equivalent to $(this).find('td:eq(6) > .PrintReport')
  $('td:eq(6) > .PrintReport', this)

  //This will .show() it if the expression evaluates to true
  //and hide if false
  .toggle(text != '0')
2 голосов
/ 08 июня 2011
$('table tr').filter(function () {
    return $('td:eq(4) > span', this).text() == "0";
}).find('td:eq(6) > .PrintReport').hide();

ОБНОВЛЕНИЕ : Если вы ищете 4-й и 6-й столбец (в человеческом измерении), вы должны использовать 3 и 5 соответственно для :eq, поскольку он работает с индексами на основе 0. Я оставил свой пример таким, каким он был, просто хотел дать это предупреждение.

Я также добавил рабочую демонстрацию: jsFiddle Demo

2 голосов
/ 08 июня 2011
$('#table tr').each(function() {  
     var text = $('td:eq(4) > span', this).text();   
     if(text=='0')   
     $('td:eq(6)').find('+.PrintReport').hide();
    });
1 голос
/ 08 июня 2011

Я думаю, вы должны использовать each (), чтобы он работал для каждой строки. Пожалуйста, попробуйте это (только что написал на лету и не проверено):

$('#table  tr  td:eq(4) > span').each(function(){
  if ($(this).html() == "0") {
            $(this).closest("tr").find('.PrintReport').hide();
        }
});
1 голос
/ 08 июня 2011

Должен работать, но это должно работать: http://jsfiddle.net/thomas4g/aAQNC/4/ Переберите каждый ряд с помощью .each ...

 $("#table tr").each(function() {
      $(this).children("td:eq(6) > .PrintReport").hide();
      });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...