Tôi đã xem qua các tài liệu jQuery và tôi nghĩ rằng chúng ta có thể làm điều này trong một dòng bằng cách sử dụng các bộ chọn :
$("#myForm :input[value!='']").serialize() // does the job!
Rõ ràng là #myForm nhận phần tử có id "myForm" nhưng điều tôi thấy ít rõ ràng hơn lúc đầu là ký tự khoảng trắng cần thiết giữa #myForm và: input vì nó là toán tử con .
: input khớp với tất cả các phần tử input, textarea, select và button.
[value! = ''] là một thuộc tính không phải là bộ lọc bình đẳng. Điều kỳ lạ (và hữu ích) là tất cả: các loại phần tử đầu vào đều có thuộc tính giá trị, thậm chí cả các hộp chọn và hộp kiểm, v.v.
Cuối cùng cũng để loại bỏ các đầu vào có giá trị là '.' (như đã đề cập trong câu hỏi):
$("#myForm :input[value!=''][value!='.']").serialize()
Trong trường hợp này, việc đặt cạnh nhau, tức là đặt hai bộ chọn thuộc tính bên cạnh nhau , ngụ ý một AND. Sử dụng dấu phẩy ngụ ý OR. Xin lỗi nếu điều đó là rõ ràng đối với những người CSS!
[value]
khớp với bất kỳ phần tử nào có thuộc tínhvalue
hiện tại , kể cả những phần tử có giá trị trống (hoặc không). Điều này là do một lỗi trong các phiên bản jQuery trước đó đã tạo ra sự không nhất quán giữa các biến thể nhất định củainput[value]
và:input[value]
. Lấy ví dụ<input value="foo"><input value=""><input value><input>
,; lỗi được minh họa trong trò chơi này .