これを別の関数に渡して$(これ)を得る方法

私は each ループ(DOMオブジェクト)内の this
を別の関数に渡しますが、その関数には
$を使用するコードの一部があります)(jQueryオブジェクト)。私はどのようにDOMオブジェクトからjQueryオブジェクトを得ることができるのだろうか。私は
$(obj)を使っても動作すると思ったが、それはできないだろう!

私は例を挙げてこれをもっと説明します。

私は次の関数の一部を別のメソッドに抽出したい:

    addWidgetControls : function() {
    //...            
    $(settings.widgetSelector, $(settings.columns)).each(function() {
        var thisWidgetSettings = iNettuts.getWidgetSettings(this.id);
        if (thisWidgetSettings.removable) {
            $('CLOSE').mousedown(function (e) {
                e.stopPropagation();    
            }).click(function() {
                    $(this).parents(settings.widgetSelector).animate({
                        opacity: 0    
                    },function() {
                        $(this).wrap('<div/>').parent().slideUp(function() {
                            $(this).remove();
                        });
                    });
                return false;
            }).appendTo($(settings.handleSelector, this));
        }
    });        
},

以下は抽出されたメソッド(動作していない)です:

    addWidgetControls: function() {
    //...
    $(settings.widgetSelector, $(settings.columns)).each(function() {
        iNettuts.doWidget(this);
    });
},

doWidget: function (widg) {
    $ = jQuery;
    settings = iNettuts.settings;
    var thisWidgetSettings = iNettuts.getWidgetSettings(widg.id);
    if (thisWidgetSettings.removable) {
        $('').mousedown(function (e) {
            e.stopPropagation();
        }).click(function() {
            $(widg).parents(settings.widgetSelector).animate({
                opacity: 0
            }, function() {
                $(widg).wrap('<div/>').parent().slideUp(function() {
                    widg.remove();
                });
            });

            return false;
        }).appendTo($(settings.handleSelector, widg));
    }
    //...

thiswidg に変更した以外は、元のメソッド(
addWidgetControls )から doWidget
コード>どこにでもあります。しかし、それは動作しません。

私は問題を調査し、元の関数( addWidgetControls )の
each ループの中に正確なコードをコピーし、すべての $(widg)
$(this)に置き換え、 widgthis
に置き換えませんでした。そしてそれは正しく働いた。 (以下のコード:)

addWidgetControls : function() {
    //...

    $(settings.widgetSelector, $(settings.columns)).each(function() {
        var wid = this;
        var thisWidgetSettings = iNettuts.getWidgetSettings(wid.id);
        if (thisWidgetSettings.removable) {
            $('CLOSE').mousedown(function (e) {
                e.stopPropagation();    
            }).click(function() {
                    $(this).parents(settings.widgetSelector).animate({
                        opacity: 0    
                    },function() {
                        $(this).wrap('<div/>').parent().slideUp(function() {
                            $(this).remove();
                        });
                    });
                return false;
            }).appendTo($(settings.handleSelector, wid));
        }
    });        
},

This means that somehow $(this) is different than
$(widg) when this is the same as
widg

PS: I’ve got this code from this tutorial

ベストアンサー

$ widg の代わりに widg を変えずに
$(this)にしておかなければならないと思います。それぞれの と this
が毎回変わるので、その関数をループで呼び出すことになります。しかし、この変数がその関数の中の同じ this
を指し示すたびに widg を使うと、あなたはあなたの関数を呼び出すでしょう。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です