Селекторы и фильтрация jQuery - PullRequest
2 голосов
/ 21 апреля 2009

Я только начинаю работать с jQuery и очень рад этому.

Моя причина публикации в том, что я написал несколько jQuery, который выполняет требуемую задачу, но я подозреваю, что ему не хватает элегантности ...

Я пытаюсь получить все строки таблицы, которые имеют: 1) класс «предмет» 2) дочернее поле ввода текста, которое имеет значение

HTML:

<tr class="item">
    <td class="sku">[dynamic]</td>
    <td class="quantity">
        <input type="text" name="[dynamic]" maxlength="3" /></td>
</tr>

JQuery

...
var selections=$(".item>.quantity>:text[value!='']").parent().parent();
...

Код, который я разместил выше, работает, но есть две вещи (по крайней мере?), Которые пахнут немного забавно.

Код запаха № 1: Я использую '.parent (). Parent ()' в конце, чтобы захватить всю строку. Есть ли какой-то способ, которым я могу просто сказать «дать мне все tr с классом« item », где у дочернего текстового ввода есть значение» вместо возврата по иерархии в конце?

Код запаха № 2: Я не могу найти способ «обрезать» значение ввода текста во время выделения, чтобы гарантировать, что пробелы не интерпретируются как содержимое. При моем текущем методе мне придется «обрезать» и проверять снова во время цикла .each, который кажется излишним.

Дайте мне знать, если вы видите «лучший путь»?

Спасибо, Ричард

Ответы [ 2 ]

5 голосов
/ 21 апреля 2009

# 1

Используйте это вместо этого (обратите внимание на селектор has):

var selections=$(".item:has(>.quantity>:text[value!=''])");

# 2

Пробелы обычно считаются допустимыми входными данными, поэтому, если ваше приложение особенно нуждается в другом, то можно фильтровать цикл, используя $.trim().

2 голосов
/ 21 апреля 2009

Я не уверен, что вы делаете это намеренно, но вам не нужно прослеживать каждого потомка до входа. Если у вас нет причин для этого, это так же хорошо:

var rows = $('tr.item:has(input:text[value!=''])');

Также обратите внимание, что в документации jQuery предлагается ввести предисловие :text с input, так как пропуск его равен *:text, что является очень медленным селектором.

...