0

注:これは、解決する必要がある2つの別々の問題であると私が判断した別の質問の続きです。また、現在、この質問を正確にどのように表現すればよいか確信が持てないので、最善を尽くし、より明確になったら、将来の参考のために質問を言い換えます.

私は 2 つの基本的な jQuery プラグイン$.fn.query$.fn.buildを作成しています。これらはそれぞれ、配列をソートし、ドキュメントに挿入する HTML コードを作成します。現在、ビデオを表示する Vimeo ビデオ ID でテストしています。

$.fn.buildには 3 つの部分があります。最初にすべての配列項目を個々のコンテナーでラップし、それらを行に構築し (問題領域)、最後にコンテナー内のすべてをラップします。(これのすべての部分はオプションです)。

具体的には、問題は次の行から発生し$(tmp).add(newRow);ます。有効な javascript ですが。

if ( options.splitBy !== undefined && options.wrapRow !== undefined ) {
    var tmp = $([]),
        newRow = function(i) {
            $(build.splice( i, i + options.splitBy )).wrapAll( options.wrapRow ).parent();
        };

    for (var i = 0, l = build.length, a = options.splitBy; i < l; i += a) {
        $(tmp).add(newRow);
    }

    build = tmp;
    console.log(build);
}

参照: http://jsbin.com/upatus/2/edit

4

1 に答える 1

1

関数自体を追加するのではなく、関数を使用したいと確信しています。tmpまた、元のオブジェクトに追加せずに新しい jQuery インスタンスにラップするのではなく、常に同じオブジェクトを使用する必要があります。試す

tmp.add(newRow(i));

ところで:配列を構築したい場合は、使用する必要があります

var tmp = [];

tmp.push(…);

今、他の質問のコードを見てきました。どちらの答えも正しく、いくつかの有効なポイントが含まれています。

  • splicejQuery のプロトタイプの配列関数であり、配列を返します。(これで修正しました)
  • メソッドqueryは配列を返しますが、連鎖のために jQuery インスタンスを返す必要があります
  • build変数は初期化されていませんが、使用されています

関数の内部で配列と jQuery オブジェクトのどちらを使用するかを実際に選択し、それらを混在させないでください。

ところで、関数の名前をよりわかりやすい名前に変更する必要があります。「ビルド」と「クエリ」は非常にあいまいで、他のプラグインと衝突する可能性があります。

于 2012-09-04T15:46:57.547 に答える