2

すべての人に:ここStackOverflowのプロトコルを理解していない場合は申し訳ありません。私はすぐにコミュニティ内での自分の立場を正すよう努めます。そうは言っても:

何が呼ばれるかに応じて、jQuery関数のコンテキストを変更しようとしています。次のコードでは、ページが最初に読み込まれるときに、limitDates()関数が現在のコンテキストとしてHTMLElementDivを使用して呼び出されていることがわかります。入力フィールドに入力して呼び出すと、divではないことがわかりますが、$(this).closest('div')を使用して親divを取得しようとすると、divではなくHTMLElementInputが返されます。何かご意見は?

更新:フィドルを作成しました:http://jsfiddle.net/earachefl/XBFNQ/8/

<script type="text/javascript" src="common/js/jquery-1.5.2.min.js"></script>
<script type="text/javascript" src="common/js/jquery-ui-1.8.12.custom.min.js" ></script>

<div class="datemodule">
    <input class="date_from" type="text" id="date_from_#name#" name="date_from" value=#start#>
</div>

<script>
    $(document).ready(function(){
        $('div.datemodule').limitDates();
        $('.date_from').keydown(function(){
            $(this).limitDates();
        });
    });

    (function($){
        $.fn.limitDates = function(){                   
            return this.each(function(){
                context = $(this).context;
                //alert(context);
                alert(context.nodeName);
                if (context.nodeName != 'DIV'){
                    alert('not a div');
                    newContext = $(this).closest('div').context;
                    alert(newContext.nodeName);
                }
            });
        };
    })(jQuery);
</script>
4

2 に答える 2

2

Context は、JQuery() に渡される DOM 要素です。したがって、最初のセレクターにはドキュメントとしての両方のコンテキストがあります。

$('div.datemodule').limitDates(); // context is the document
$('.date_from').keydown(...   // context is the document

コールバックに関して言えば、$(this) を使用する場合、コンテキストはイベントをトリガーする要素です。

$('.date_from').keydown(function(){
    $(this).limitDates();         // context is the element which has class .date_form and triggered that event
}); 

そして、 this.each を使用する関数に関しては、各反復の各要素にコンテキストが設定されます。

return this.each(function(){
    $(this).context; // context is the element of iteration
}

私が言ったように、コンテキストはJQueryに渡されるものであり、おそらく読み取り専用です。

于 2011-07-20T15:00:52.980 に答える
1

コンテキストの説明は次のとおりです。

The DOM node context originally passed to jQuery();

したがってclosest、コンテキストを呼び出した後でも、 にinput渡された元のままjQueryです。

を取得したい場合はdiv、取得しないのはなぜですか?

newContext = $(this).closest('div')[0];
于 2011-07-20T15:04:44.190 に答える