2016-04-07 2 views
0

У меня есть таблица в JSP, который отображает содержимое списка следующим образом:Скрыть строки в JSP и на основе значений в столбце

<tbody> 
    <c:forEach items="${A_List}" varStatus="status" var="alist"> 
     <tr role="row" id="colorRow"> 
      <td>${alist.A}</td> 
      <td>${alist.B}</td 
      <td>${alist.C}</td> 
      <td id="ID1">${alist.D}</td> 
     </tr>  
    </c:forEach> 
</tbody> 

Теперь столбец D будет отображающим несколько строк. Я хочу скрыть определенные строки на основе отображаемого значения. Скажем, я просто хочу показать записи, которые имеют значение «SHOWME», и скрыть остальные. Я использую следующий код jQuery для этого:

$(function agreed(){ 
    var arr=[]; 

    $("#ID1").each(function(){ 
     arr.push($(this).text()); 
    }); 

    $.each(arr,function(index,value){ 
     if(value != "AGREED"){ 
      ("#this").parent().hide(); 
     } 
    }); 
}); 

Однако ничего не происходит. Теперь, здесь как-то это обозначается как дубликат. Но ответ на вопрос, на который он помечен как дубликат, в моем случае не работает.

+0

Возможный дубликат [JQuery: Show/Hide строки таблицы на основе значения столбца] (http://stackoverflow.com/questions/17722205/jquery-table-row-show-hide-based-on-column-value) –

ответ

1

У вас есть ряд проблем. Прежде всего, атрибут id предназначен для создания идентификатора для для элемента, поэтому вы не должны делать <td id="ID1">...</td> внутри цикла JSP-тега. Вместо этого используйте атрибут class.

Во-вторых, вы создаете массив, содержащий весь текст столбцов, на которые вы смотрите. Это здорово, но на самом деле это ничего не делает для вас. Невозможно работать назад от строки до конкретного элемента, из которого он пришел.

Позже вы выполните $('#this').parent().hide(), который ищет элемент с идентификатором «это» (не существует), получает родительский элемент любых согласованных элементов (их нет) и пытается скрыть их (элементы не выбраны так ничего не делает).

Что вы могли бы вместо того, чтобы сделать это:

$(function() { 
    $('.ID1').filter(function() { 
     return $(this).text() != 'AGREED'; 
    }).parent().hide(); 
}); 

Это выбирает все <td> элементов с классом (не ид - смотри выше о том, почему вы должны изменить его) из «ID1», фильтрует их вплоть до тех, где их текстовое содержимое не соответствует значениям, которые вы хотите сохранить, получает их родительский элемент (всю строку), а затем скрывает их.

+0

Да. Это работает. Но, вроде. Моя таблица - это DataTable. Таким образом, он скрывает записи, но я по-прежнему получаю возможность перейти к следующим 10 записям, и там отображаются скрытые записи. –

+0

@AbhineetKumar В этом случае вам нужно будет вызвать код после загрузки следующих 10 записей, а не только при загрузке страницы. –

+0

Все записи загружаются при загрузке страницы. Записи отправляются в JSP в виде списка, а затем отображаются 10 за раз в таблице данных, как я уже упоминал в коде. Итак, когда я запускаю ur Script, он скрывает записи из первых 10 результатов, а затем показывает их позже. –

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