#jquery #select #jquery-selectors #children
#jquery #выберите #jquery-селекторы #дочерние вызовы
Вопрос:
Как мне превратить это, которое использует два вызова two children
:
$('#id tr').children('td').children('input')
во что-то, что вызывает дочерние вызовы только один раз? Я пытаюсь выделить каждое текстовое поле ввода внутри определенной строки таблицы ( tr
), которая является дочерней для #id
. Я пытался
$('#id tr').children('td input')
и
$('#id tr').children('td > input')
Но ни то, ни другое не работает. Я вроде как новичок в этих выражениях селектора, так что извините, если это очевидно.
Ответ №1:
Хотя мне нравятся $("#id tr td input")
предложения, в некоторых случаях (например, если у вас был $("#id tr")
объект из какого-либо другого источника) вы могли бы вместо этого искать .find()
, который проходит на несколько уровней глубже (вместо .children()
которого проходит только один):
$("#id tr").find("td input")
Комментарии:
1. проверьте мой ответ, который в основном позволяет вам использовать селектор из другого источника.
2. @kuroir, да, если у вас есть селектор вместо объекта, вы также можете использовать
$("x", "y")
синтаксис. Хотя — не то чтобы это действительно имело значение — некоторые тесты, которые я видел, показывают, что$("x", "y")
они медленнее, чем$("y").find("x")
. Я нахожу это хуже, потому что это менее явно.3. сработало как по волшебству. Что приятно, так это то, что
find
происходит на несколько уровней глубже, о чем я не знал до прочтения этого ответа, и из-за этого я могу просто уменьшить его до$('#id').find('input');
Еще раз спасибо, 1 и проверить.
Ответ №2:
Почему бы просто не $('#id tr input')
?
Или, может быть $('#id input')
Ответ №3:
Я поражен, что никто не предложил это:
$('td input', '#idc tr')
Что позволит вам получить #idc tr
часть из переменной. По сути, то, что вы делаете, — это конкатенация; таким образом, вы сначала считываете правый селектор, а затем левый, например:
$('> input', 'div')
Эквивалентно:
$('div > input')
Теперь давайте немного поиграем в гольф; способ передачи селектора можно упростить до этих двух форм:
$('input', '#idc td')
// vs
$('#id').find('td input')
Оба в основном выполняют одно и то же, однако, как вы, возможно, заметили, второй позволяет вам выполнять объединение jquery в цепочку; используя .end()
для возврата к предыдущему селектору #id
.
Обычно я использую первый оператор всякий раз, когда мне нужно сделать что-то простое, что не требует от меня возврата к предыдущему селектору.
Ответ №4:
Вы можете установить класс для своих входных данных и выбрать его
$('#id tr').children('td:input').hasclass('class name')
Комментарии:
1. Это не только не сработает, потому что
td:input
недопустимый синтаксис, это также не сработает, потому чтоhasClass
(неhasclass
) возвращает логическое значение вместо объекта jQuery.