1

これは理論的な質問です:

関数をパラメーターとして受け入れないすべての jQuery 関数を指す一般的な名前はありますか? そのような index()、children()、height() ...

更新: 名前がわかっている場合は、次のような質問をすることができます:「関数を「名前付き」関数に渡すことはできますか?」

もう少し詳しく説明すると、関数をパラメーターとして jQuery のメソッドに渡そうとしましたが、機能し.index()ません。

 textbox.closest('tr').index(function(){var index = $(this);}); 
4

1 に答える 1

1

パラメータを受け取るすべてのjQuery関数は、関数を受け取ることができます。JavaScriptでは、関数はオブジェクトであり、jQueryもバニラJavaScriptもタイプセーフではありません。つまり、関数がパラメーターを受け入れる限り、その引数の1つとして関数を受け入れます。

エルゴ、パラメータを受け入れないメソッドは、関数を受け入れない唯一のメソッドです。


編集:

技術を習得したい場合は、パラメーターを受け入れないメソッドでも、引数として関数を受け入れます。JavaScriptはタイプセーフではないのと同様に、関数のシグネチャに関するルールも実際には適用されません。つまり、入力された引数の数が定義された引数の数と一致するかどうかはチェックされません。これが、「関数なし[関数名]が引数[引数リスト]を取得する」の代わりに「null参照」エラー(未処理の場合)が発生する理由です。これは、関数が1つ、2つ、またはまったく必要ない場合でも、関数に無制限の数の引数を渡すことができる理由でもあります。


アップデート:

あなたの元の質問に対する私の解決策に関して、jQueryは、無効な引数が渡されたときに単にnullを返すことが多いという点で堅実な言語であることを追加して明確にしたいと思います(ただし、間違った番号が渡されてもエラーにはなりません)引数の)。JavaScriptは多くの状況で同じですが、私が示唆し、常識が示すように、合法性に関係なく、メソッドに渡す引数が多すぎたり少なすぎたりすることは無意味です。

.index()更新とコメントに関して、jQueryのメソッドの基本的な使用法を誤解していると思います。適切に使用されると、このメソッドは要素のコレクションで呼び出され、パラメーターとしてセレクター(または一致する要素)を持ち、指定されたセレクターを満たす、または指定された要素に一致する要素の最初の出現のインデックスを返します。


アップデート:

.index()更新された例から、関数の使用法を少し誤解していると思ったのは正しかったことがわかります。関数はセレクターまたは要素のいずれかを取りますが、どちらも返さない関数を渡しました。(既存の構文を使用して)必要なものは次のとおりです。

textbox.closest('tr').index(function(){ return $(this);}); 

または(もっと簡単に):

textbox.closest('tr').index($(this));

もう少し詳細を追加するために(そして、おそらく、最初の質問にもっとよく答えるために)、次のようなこともできます。

function getOnlyParagraphElements() {
    return this.tagName === "p";
}

var collection = $("body").find("*");
var firstParaIndex = collection.index(getOnlyParagraphElements);

これは単なる例でした(もちろん、jQueryを使用して段落を取得できることはわかっています)が、概念は同じです。これが、独自のセレクターを作成する方法です。

また、例では、常に1つのアイテムのコレクションをチェックしていることに注意してください。つまり、値0または値のいずれかのみを取得します-1(要素がセレクター/渡された要素と一致しない場合)。兄弟に対してメソッドを呼び出す要素のインデックスを取得することが目標である場合は、パラメーターを指定せずにメソッドを呼び出すだけで済みます。

于 2012-11-13T15:11:33.500 に答える