Селектор для возврата ближайшего , только если в таблице более 2 строк

#javascript #jquery #jquery-selectors #css-selectors

#javascript #jquery #jquery-селекторы #css-селекторы

Вопрос:

Есть ли в jQuery селектор для выполнения чего-то вроде:

 $(this).closest('tr:count(tr>2)');
  

Контекст this — это <input> элемент внутри <td> .

Отказ от ответственности: Я знаю, что это можно сделать с помощью .length .size .filter .not etc, Но мне интересно, есть ли хороший способ сделать это, просто используя селекторы CSS.

Комментарии:

1. Могу я спросить, для чего именно это?

2. Собственные селекторы CSS не поддерживают выбор родительских элементов. Я думаю, расширение jQuery к существующему синтаксису селектора также не позволяет вам делать то, что вы просите.

3. @Matti при нажатии кнопки ввода (кнопка удаления строки) эта строка должна быть удалена, но только если это не последняя оставшаяся строка в таблице. Первый <tr> — это заголовок, поэтому, следовательно, > 2.

4. Объедините решения @Matti и @Amadan.

Ответ №1:

Не тестировал, но, вероятно

 $(this).closest('tr:not(:only-child)')
  

предполагая, что у tr будут только tr сестры, что не является необоснованным.

Комментарии:

1. Это гарантирует наличие более 1 строки, но не обязательно более 2 строк.

2. Да, BoltClock, к сожалению, это не сработает для > 2 строк, но сработает для > 1. Я изначально пробовал это на всякий случай. Это сработает, если использовать метод Матти по помещению заголовка в <thead> раздел

3. Жаль, что в jQuery нет :more-than-child(2) селектора

4. Кажется, лучшее решение, если я правильно помещу заголовок в <thead>

5. ДА. Извините за неправильное прочтение вопроса; действительно, решение — это комбинация @Matti и моего 🙂

Ответ №2:

Поместите ваш заголовок в <thead> , а ваши строки в <tbody> , как и должно быть. Таким образом, будет работать простой селектор, такой как tbody:has(tr)>tr или тот, который указан @Amadan.

(Хорошо, я не совсем подумал, что селектор через …)

Комментарии:

1. Я бы на самом деле пошел с этим. 1