質問

多数のテキスト入力を含む検索フォームがあります。 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を使用してこれを行う方法はありますか?

役に立ちましたか?

解決

jQueryドキュメントを見てきましたが、< a href = "http://docs.jquery.com/Selectors" rel = "noreferrer">セレクター:

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

明らかに、#myFormはid&quot; myForm&quot;の要素を取得します。しかし、最初はあまりはっきりしていなかったのは、と:inputの間に descendant 演算子。

:input は、すべての入力、テキストエリア、選択、ボタンに一致します要素。

[value!= ''] は属性ではありません等しいフィルター。奇妙な(そして役立つ)ことは、すべての:input 要素タイプには、選択やチェックボックスなどの値属性さえ含まれていることです。

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

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

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

他のヒント

トムのソリューションを機能させることはできませんでした(?) jQuery 2.1.1を使用しています。

var formData = $("#formid :input")
    .filter(function(index, element) {
        return $(element).val() != '';
    })
    .serialize();

これは私のために働く:

data = $( "#my_form input").filter(function () {
        return !!this.value;
    }).serialize();

正規表現を使用して実行できます...

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

上記のソリューションを使用しましたが、私にとってはうまくいきませんでした。だから私は次のコードを使用しました

$('#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;
        });

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

jQueryのソースコードを見ます。 最新バージョンの3287行目。

&quot; serialize2&quot;を追加します。および「serializeArray2」」関数。 もちろん、それらに意味のある名前を付けます。

または、より良い方法は、未使用の変数をserializedFormStrから引き出すための何かを書くことです。 =&ampを探すいくつかの正規表現。中央の文字列または=で終わる 正規表現ウィザードはありますか?

更新: 私はrogeriopvlの回答がより良い(+1)が好きです...特に今は良い正規表現ツールが見つからないので。

coffeescriptで、次の操作を行います。

serialized_form = $(_.filter($(context).find("form.params input"), (x) -> $(x).val() != '')).serialize()

セレクターのすべての要素を反復処理できる.each()jquery関数を確認する必要がある場合があります。この方法で、各入力フィールドを確認し、空かどうかを確認してから削除できますelement.remove()を使用してフォームから。その後、フォームをシリアル化できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top