JQuery содержит селектор - несколько текстовых элементов - PullRequest
1 голос
/ 22 октября 2009

Я новичок в JQuery и, возможно, упускаю очевидное, но как я могу отфильтровать таблицу, используя селектор содержимого, но заставить ее искать несколько строк, используя оператор ИЛИ? Другими словами, я хотел бы, чтобы строки, содержащие «Красный» ИЛИ «Желтый», были скрыты.

Пока у меня есть это, которое работает, скрывая все строки кроме указанной даты:

$(function()
{
    $('div#WebPartWPQ5 table.ms-summarycustombody tr:not(:contains("10/27/2009"))')
        .hide();
});

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

Заранее спасибо.

John

Ответы [ 2 ]

1 голос
/ 22 октября 2009

Разделяйте строки селектора запятыми.

$('table tr.red, table tr.yellow').hide()
0 голосов
/ 25 октября 2009

У вас есть контроль над HTML на вашей странице?

Если это так, рассмотрите возможность добавления класса «date» (или «color») к соответствующему элементу td каждой строки. Затем - вместо использования: contains - который, скорее всего, будет страдать проблемами совместимости между браузерами, переберите строки таблицы, получая доступ к $('tr td.date').val() и выполняя любые необходимые вам тесты.

Кроме того, я бы предложил использовать date.js (http://www.datejs.com/), чтобы упростить обработку даты.

var datestart = Date();
var dateend = Date();

$('div#WebPartWPQ5 table.ms-summarycustombody tr td.date').each(function(){
    var date = Date.parse( $(this).val() );
    if (date.between(datestart, dateend === true)) {
        $(this).parent().hide(); //your logic here
    }
});

И еще один пример, в котором используется метод .filter () (см. http://docs.jquery.com/Traversing/filter#fn).

var datestart = Date();
var dateend = Date();

$('div#WebPartWPQ5 table.ms-summarycustombody tr').filter(function(){
    var date = Date.parse( $('td.date', this).val() );
    return date.between(datestart, dateend) === true;
}).hide(); //your logic here
...