Я просматривал документы jQuery и думаю, что мы можем сделать это в одной строке, используя селекторы :
$("#myForm :input[value!='']").serialize() // does the job!
Очевидно #myForm получает элемент с идентификатором «Myform» , но то , что было менее очевидным для меня в первый том , что символ пробела необходимо между #myForm и: вход , как это потомок оператора.
: input соответствует всем элементам input, textarea, select и button.
[value! = ''] - атрибут не равен фильтру. Странная (и полезная) вещь заключается в том, что все: типы входных элементов имеют атрибуты значений, даже для выбора, флажков и т. Д.
Наконец, чтобы также удалить входы, где значение было '.' (как указано в вопросе):
$("#myForm :input[value!=''][value!='.']").serialize()
В этом случае сопоставление, то есть размещение двух селекторов атрибутов рядом друг с другом , подразумевает AND. Использование запятой подразумевает ИЛИ. Извините, если это очевидно для специалистов по CSS!
[value]
соответствует любому элементу сvalue
присутствующим атрибутом , включая элементы с пустыми значениями (или без значений). Это связано с ошибкой в более ранних версиях jQuery, которая создавала несоответствие между некоторыми вариантамиinput[value]
и:input[value]
. Возьмем, например<input value="foo"><input value=""><input value><input>
,; ошибка проиллюстрирована на этой скрипке .