10

アプリ用に設計された ajax 呼び出しを作成する jquery プラグインを作成しています。

このプラグイン内で、私の ajax 呼び出しは次のようになります (質問が必要とするものに縮小されます)。

    $.ajax({
        url: route,
        type: "post",
        data: inputData,
        success: function(response, textStatus, jqXHR) {
            if (outputSelector !== undefined) {

                $(outputSelector).html(response);
                // or
                $(outputSelector).val(response);

            }
        }
    });

outputSelector は、プラグインの外部で定義されたセレクターです。<div>このセレクターが なのか、<input>それとも なのかさえわかりません<select>。val() または html() を使用する必要があるかどうかを知るスマートな方法はありますか?

4

5 に答える 5

13

おそらく、要素にvalueプロパティがあるかどうかを確認できます。

var el = $(outputSelector);
if (el[0].value !== undefined) {
    el.val(response);
} else {
    el.html(response);
}

したがって、1行のユニバーサルソリューションのように、次のようになります。

$(outputSelector).each(function() {
    this[this.value !== undefined ? "value" : "innerHTML"] = response;
});
于 2012-10-16T16:38:37.510 に答える
4

がクラスセレクターであり、要素が混合型である場合outputSelectorは、を使用する必要があります.eachdiv同じクラスと混在させるのは良くありませんinputが、プラグインを作成する場合は、そのような場合を考慮する必要があります。

$(outputSelector).each(function() {
    if ('value' in this) {
        $(this).val(response);
    } else {
        $(this).html(response);
    }
});
于 2012-10-16T16:43:12.613 に答える
2

メソッドを使用して、使用する.is(..)メソッドを決定できます。

$.ajax({
    url: route,
    type: "post",
    data: inputData,
    success: function(response, textStatus, jqXHR) {
        if (outputSelector !== undefined) {
            var $output = $(outputSelector),
                method = $output.is('input,select,textarea') ? 'val' : 'html';

            $output[method](response);
        }
    }
});
于 2012-10-16T16:39:09.343 に答える
1

.prop()メソッドを使用して、特定のセレクターに対してプロパティが定義されているかどうかを判断することもできます。

if ($(outputSelector).prop("value") !== undefined)
  $(outputSelector).val(response);
else
  $(outputSelector).html(response);

または、 .hasOwnProperty()を使用することもできます

于 2012-10-16T16:50:10.117 に答える
0

成功関数の中に、次のように入力します。

if (outputSelector !== undefined) {
    if(outputSelector.is("input"))
    {
        outputSelector.val(response);
    } 
    else if (outputSelector.is("div"))
    {
        outputSelector.html(response);
    }
}

switchステートメントを使用する方が構文は優れていますが、入力のみがに使用されると想定しval()、他のすべてhtml()は最後else ifをjustに置き換えてelse、条件を削除するだけです。

于 2012-10-16T16:40:44.523 に答える