Выберите любой TR, где текст TD содержит foo
Я уверен, что это можно сделать, не вдаваясь в функцию, но я хочу захватить любой TR, где есть примеры <td>Mail ...</td>
или <td>Foo ... </td>
.
Я постоянно думаю, что это должно выглядеть как
$('tr[./text()^="foo"]')
, но хром ему это не нравится.
или $('tr[./td/text()^="Mail"]')
, но не повезло
это можно сделать с помощью простого селектора?
Ответы
Ответ 1
Я очень удивлен, что никто не придумал этого, может быть, мой вопрос был слишком расплывчатым.
$('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()
Идет, чтобы сделать его букмарклетом для поиска брони и оружия для dk или pally
Ответ 2
Одно из возможных решений:
$('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, вы увидите, что первая строка выбирается дважды).
Ответ 3
Существует "содержит:"
TD:contains("Mail")
Но это просто ищет Mail в любом месте элемента (нет "начинается с" ).