В jQuery, как я могу выбрать различные элементы по атрибуту имени? - PullRequest
4 голосов
/ 18 ноября 2009

Я пытаюсь перебрать некоторые элементы в форме (радио, текстовые поля и поля выбора) и получить значение от каждого элемента. Я перебираю по названию каждого элемента (я не думаю, что смогу использовать идентификатор, потому что все группы переключателей имеют разные идентификаторы, но у всех одинаковое имя).

Вот 2 селектора, которые охватывают все нужные мне элементы:

$("input[name=" + prop + "]")
$("select[name=" + prop + "]")

где prop - итератор цикла.

Я хочу выполнить одну и ту же операцию на обоих селекторах, поэтому я попытался объединить их:

$("input[name=" + prop + "]", "select[name=" + prop + "]")

Но это не сработало.

Есть ли способ объединить поиск обоих входных элементов и выбрать элементы в одном селекторе?

Спасибо!

Ответы [ 3 ]

10 голосов
/ 18 ноября 2009

У вас есть только одна маленькая ошибка: вы объявили два селектора как два разных параметра вместо одного параметра с запятой в качестве части селектора:

$("input[name=" + prop + "], select[name=" + prop + "]")

То, как вы его написали, использует элементы второго параметра селектора в качестве контекста, из которого разрешается первый параметр селектора.

5 голосов
/ 18 ноября 2009

Если в строку выбора включена запятая, она будет работать. Вы также можете сделать

$("input, select").filter("[name=" + prop + "]")

, что исключает запись "[name =" + prop + "]" дважды.

4 голосов
/ 18 ноября 2009

Не пытайтесь подковать все, что вы делаете, в jQuery. Стандарт HTML DOM Level 1 дает вам HTMLFormElement.elements, что просто, быстро и не вызывает ошибок для необычных символов в name, как в строке селектора.

<form id="x" ...>
    <input type="text" name="foo" />
    <select name="foo"></select>
</form>

<script type="text/javascript">
    var prop= 'foo';
    var form= $('#x')[0];
    var foos= form.elements[prop];
    alert(foos.length+' '+foos[0].type+' '+foos[1].type);  // 2 text select-one
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...