Селектор jQuery для получения формы по имени
У меня есть следующий HTML:
<form name="frmSave">...</form>
Просто чтобы знать, я не могу изменить HTML, чтобы добавить id
или что-то еще, чтобы я мог легко получить элемент form
в переменной.
Это то, что я пытался получить элемент form
по имени:
var frm = $('form[name="frmSave"]');
console.log(frm);
(но я верю, что приведенный выше код будет пытаться получить frmSave
элемент с именем frmSave
внутри form
что мне не нужно).
Как я могу добиться этого, возможно ли получить form
только по name
и с помощью селектора?
Обновить:
В исходном коде я действовал неправильно (я использовал пробел, называемый "комбинатор"), поэтому jQuery пытался получить дочерние элементы, и я спрашивал себя, что не так, поскольку ничего не возвращалось :-)
Принятый ответ дает лучшее объяснение этому, поэтому немного места может изменить все - я буду спать в следующий раз.
Ответы
Ответ 1
$('form[name="frmSave"]')
является правильным. Вы упомянули, что думаете, что в этой форме все дети будут иметь имя frmsave
; это произойдет только в том случае, если между формой и селектором есть пробел или другой комбинатор, например: $('form [name="frmSave"]');
$('form[name="frmSave"]')
буквально означает найти все формы с именем frmsave
, потому что комбинатор не задействован.
Ответ 2
// this will give all the forms on the page.
$('form')
// If you know the name of form then.
$('form[name="myFormName"]')
// If you don't know know the name but the position (starts with 0)
$('form:eq(1)') // 2nd form will be fetched.
Ответ 3
У вас нет комбинатора (пробел, >
, +
...), поэтому дети никогда не будут вовлечены.
Однако вы могли бы избежать необходимости в jQuery с помощью ID
и getElementById
, или вы могли бы использовать старый getElementsByName("frmSave")[0]
или еще более старый document.forms['frmSave']
. Здесь нет необходимости в jQuery.
Ответ 4
Чтобы узнать, присутствует ли форма, я использую
if($('form[name="frmSave"]').length > 0) {
//do something
}