Я переглядав документи jQuery і думаю, що ми можемо це зробити в одному рядку за допомогою селекторів :
$("#myForm :input[value!='']").serialize() // does the job!
Очевидно, що #myForm отримує елемент з id "myForm", але те, що мені спочатку було менш очевидним, - це те, що потрібний пробільний символ між #myForm та: input, оскільки це оператор- нащадок .
: введення відповідає всім елементам введення, текстовій області, елементам вибору та кнопок.
[value! = ''] є атрибутом, не рівним фільтру. Дивна (і корисна) річ у тому, що все: введення типи елементів мають атрибути значення, навіть вибрані та прапорці тощо.
Нарешті, також видалити вхідні дані, де було значення "." (як зазначено у питанні):
$("#myForm :input[value!=''][value!='.']").serialize()
У цьому випадку супозиція, тобто розміщення двох селекторів атрибутів поруч один з одним , означає І. Використання коми означає ІЛИ. Вибачте, якщо це очевидно для людей CSS!
[value]
збігається з будь-яким елементом ізvalue
наявним атрибутом , у тому числі з порожніми (або відсутніми) значеннями. Це пов’язано з помилкою у попередніх версіях jQuery, яка створила невідповідність між певними варіаціямиinput[value]
та:input[value]
. Візьмемо, наприклад<input value="foo"><input value=""><input value><input>
,; помилка проілюстрована в цій скрипці .