Как получить коллекцию входных элементов по имени атрибута - PullRequest
1 голос
/ 06 апреля 2011

У меня есть форма, которая выглядит следующим образом:

<form method="post" enctype="multipart/form-data" onsubmit="return new_post_form_submit();">    
<input type="hidden" name="task" value="addPost">   
<input type="hidden" name="post_photo_edit[]" value="0">    
<input type="hidden" name="post_photo_edit[]" value="0">
<input type="hidden" name="post_photo_edit[]" value="0">
 ... 
</form>

Внутри функции new_post_form_submit я бы хотел выбрать все элементы с именем post_photo_edit в качестве коллекции.Как вы можете видеть, его имя на самом деле post_photo_edit[], потому что я хочу, чтобы оно было в виде массива в моем PHP-коде.

Я использую MooTools, но, вероятно, jQuery будет иметь точно такое же решение для этого.

Я пытался позвонить

$$("input[name='post_photo_edit[]']")

, но это дало мне исключение.И называя это так:

$$("input[name='post_photo_edit']")

возвращает пустую коллекцию.

Я знаю, что я могу назвать это вместо

document.getElementsByName("post_photo_edit[]")

, и она будет работать идеально, но я 'Мне интересно, как это выражение должно выглядеть в MooTools, чтобы работать так, как описано выше.

Есть идеи?

Ответы [ 3 ]

5 голосов
/ 06 апреля 2011

Функция: $$

Выбирает и расширяет элементы DOM. Вернуть экземпляр Elements. Возвращенный экземпляр Element является массивоподобным объектом, поддерживающим каждый метод Array и каждый метод Element.

Синтаксис:

var myElements = $$(argument);

Аргументы:

  • селектор - (строка) Селектор CSS
  • elements - (elements), (collection) или (array) Перечислимый список элементов
  • элемент, элемент - (элемент) любое количество элементов в качестве аргументов

Возвращает:

  • (elements) - Массивоподобная коллекция Elements для всех соответствующих элементов DOM, дополненная документом: id.

Итак, вы должны использовать: $$(document.getElementsByName("post_photo_edit[]"));

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

Но вы также можете избежать оператора массива следующим образом: $$("input[name=post_photo_edit\[\]]")

1 голос
/ 06 апреля 2011

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

1 голос
/ 06 апреля 2011

Не уверен насчет MooTools, но чтобы выбрать каждый элемент с атрибутом, который НАЧИНАЕТСЯ с чего-то, вы делаете это:

$('input[name^="post_photo_edit"]')

Вы можете проверить это здесь: jQuery начинается с Selector

...