#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>
, как и должно быть. Таким образом, будет работать простой селектор, такой как тот, который указан @Amadan. tbody:has(tr)>tr
или
(Хорошо, я не совсем подумал, что селектор через …)
Комментарии:
1. Я бы на самом деле пошел с этим. 1