111

GET 経由で送信する多数のテキスト入力とドロップダウンを含む検索フォームがあります。検索の実行時にクエリ文字列から空のフィールドを削除して、よりクリーンな検索 URL を取得したいと考えています。

var form = $("form");  
var serializedFormStr = form.serialize();  
// I'd like to remove inputs where value is '' or '.' here
window.location.href = '/search?' + serializedFormStr

jQueryを使用してこれを行う方法はありますか?

4

9 に答える 9

176

私はjQueryのドキュメントを見てきましたが、セレクターを使用して1行でこれを行うことができると思います:

$("#myForm :input[value!='']").serialize() // does the job!

明らかに #myForm は id "myForm" の要素を取得しますが、最初はそれほど明白ではありませんでしたが、#myForm と :input の間には子孫演算子であるため、スペース文字が必要でした。

:inputは、input、textarea、select、および button のすべての要素に一致します。

[value!='']は属性が等しくないフィルターです。奇妙な (そして役に立つ) ことは、すべての :input要素タイプが、select やチェックボックスなどでさえ value 属性を持っていることです。

最後に、値が「.」の入力も削除します。(質問で述べたように):

$("#myForm :input[value!=''][value!='.']").serialize()

この場合、並置、つまり2 つの属性セレクターを隣り合わせに配置することは、AND を意味します。コンマを使用すると、OR を意味します。それが CSS 関係者にとって明らかである場合は、申し訳ありません。

于 2009-03-04T14:29:48.103 に答える
62

Tom のソリューションを機能させることはできませんでしたが (?)、.filter()空のフィールドを識別する短い関数を使用してこれを行うことができました。jQuery 2.1.1 を使用しています。

var formData = $("#formid :input")
    .filter(function(index, element) {
        return $(element).val() != '';
    })
    .serialize();
于 2015-02-13T15:50:32.417 に答える
11

これは私のために働く:

data = $( "#my_form input").filter(function () {
        return !!this.value;
    }).serialize();
于 2015-05-12T12:39:58.127 に答える
11

あなたは正規表現でそれを行うことができます...

var orig = $('#myForm').serialize();
var withoutEmpties = orig.replace(/[^&]+=\.?(?:&|$)/g, '')

テストケース:

orig = "a=&b=.&c=&d=.&e=";
new => ""

orig = "a=&b=bbb&c=.&d=ddd&e=";
new => "b=bbb&d=ddd&"  // dunno if that trailing & is a problem or not
于 2009-03-04T07:55:36.630 に答える
3

上記の解決策を使用しましたが、私にとってはうまくいきませんでした。だから私は次のコードを使用しました

$('#searchform').submit(function(){

            var serializedData = $(this).serializeArray();
            var query_str = '';

            $.each(serializedData, function(i,data){
                if($.trim(data['value'])){
                    query_str += (query_str == '') ? '?' + data['name'] + '=' + data['value'] : '&' + data['name'] + '=' + data['value'];
                }
            });
            console.log(query_str);
            return false;
        });

誰かのために役立つかもしれません

于 2014-02-15T06:34:33.593 に答える
1

jQuery のソース コードを見てみましょう。最新バージョンの行 3287。

「serialize2」および「serializeArray2」関数を追加する場合があります。もちろん、意味のある名前を付けてください。

または、serializedFormStr から未使用の変数を引き出すために何かを記述する方がよいでしょう。文字列の途中または = で終わる =& を探す正規表現はありますか?

更新: 私は rogeriopvl の回答の方が好きです (+1)... 特に、現在、適切な正規表現ツールが見つからないためです。

于 2009-03-04T00:00:40.487 に答える
0

coffeescript で、次のようにします。

serialized_form = $(_.filter($(context).find("form.params input"), (x) -> $(x).val() != '')).serialize()
于 2013-07-28T06:47:51.697 に答える
-1

セレクターのすべての要素を反復処理できる .each() jquery 関数を見たいと思うかもしれません。このようにして、各入力フィールドをチェックして、それが空かどうかを確認し、フォームから削除できます。 element.remove() を使用します。その後、フォームをシリアル化できます。

于 2009-03-04T00:07:34.057 に答える