Подтвердить что ты не робот

Селектор jQuery для получения формы по имени

У меня есть следующий HTML:

<form name="frmSave">...</form>

Просто чтобы знать, я не могу изменить HTML, чтобы добавить id или что-то еще, чтобы я мог легко получить элемент form в переменной.

Это то, что я пытался получить элемент form по имени:

var frm = $('form[name="frmSave"]');

console.log(frm);

(но я верю, что приведенный выше код будет пытаться получить frmSave элемент с именем frmSave внутри form что мне не нужно).

Как я могу добиться этого, возможно ли получить form только по name и с помощью селектора?


Обновить:

В исходном коде я действовал неправильно (я использовал пробел, называемый "комбинатор"), поэтому jQuery пытался получить дочерние элементы, и я спрашивал себя, что не так, поскольку ничего не возвращалось :-)

Принятый ответ дает лучшее объяснение этому, поэтому немного места может изменить все - я буду спать в следующий раз.

4b9b3361

Ответ 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
}