Выберите любой TR, где текст TD содержит foo - PullRequest
10 голосов
/ 06 марта 2011

Я почти уверен, что это можно сделать, не входя в функцию, но я хочу взять любой TR, где есть <td>Mail ...</td> или <td>Foo ... </td> в качестве примеров.как

$('tr[./text()^="foo"]'), но хром не нравится.или $('tr[./td/text()^="Mail"]') но не повезло ли это с помощью простого селектора?

Ответы [ 3 ]

23 голосов
/ 06 марта 2011

Я очень удивлен, что никто не придумал это, возможно, мой вопрос был слишком расплывчатым.

$('tr:has(td:contains("Leather"))').hide()
$('tr:has(td:contains("Mail"))').hide()
$('tr:has(td:contains("Cloth"))').hide()
$('tr:has(td:contains("Bow"))').hide()
$('tr:has(td:contains("Gun"))').hide()

Собираюсь сделать это букмарклетом для поиска доспехов и оружия для дк или пали

5 голосов
/ 06 марта 2011

Одно из возможных решений:

$('td').filter(function() {
    return $(this).text().indexOf('Foo') === 0;
}).closest('tr');

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

Редактировать: Но это может выбрать элементы <tr> несколько раз. Я на самом деле не знаю, как jQuery справляется с этим. Другое решение состоит в том, чтобы использовать два вложенных filter с (на tr и на td, но почему-то это неэффективно).

Edit2: Начиная с версии 1.4.4, jQuery кажется достаточно умным, чтобы иметь дело с несколькими вхождениями одного и того же элемента (то есть он работает как набор). DEMO здесь (если вы перейдете на версию 1.4.2, вы увидите, что первый ряд выбирается дважды).

1 голос
/ 06 марта 2011

Есть "содержит:"

TD:contains("Mail")

Но это просто ищет Почту в любом месте элемента (нет «начинается с»).

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