1
<globemedia id="1"></globemedia>

<script type="text/javascript">
        $("globemedia").each(function(index, value) {
            var globeIDxMedia = $(this).attr("id");
            $.get("getmedia.jsp?mediaID="+globeIDxMedia,function(a){
                $(this).html(a);
            });
        });
</script>

カスタマイズしたタグにコンテンツをロードするために使用する上記のスクリプト<getmedia id="1"></getmedia>

スクリプトは、ページ getmedia.jsp からデータを取得するまで正常に動作しますが、使用する$(this).html(a);とデータがロードされません。

jqueryフォーラムから回答を得まし た カスタムタグでも動作します

<script type="text/javascript">
        $(document).ready(function(){
            $("div[data-globalmedia]").each(function(index, value) {
                var globeIDxMedia = $(this).attr("id");
                $(this).load("getmedia.jsp?mediaID="+globeIDxMedia);
            });
        });
</script>

jQueryの専門家は、あなたが使用$(document).ready(function(){});しなければならないソリューションを私に与えてくれました。それは魅力のように機能します

4

3 に答える 3

8

$(this)関数の外部への参照を保持し$.get()ます。

于 2012-07-01T17:01:33.523 に答える
3
<script type="text/javascript">
    $("globemedia").each(function(index, value) {
        var globeIDxMedia = $(this).attr("id");
        var self = $(this);
        $.get("getmedia.jsp?mediaID="+globeIDxMedia,function(a){
            $(self).html(a);
        });
    });
</script>

のコールバック内での意味は、アウターのコールバックthis内とは異なります。ここのセマンティクスについて詳しく読むことができます: http://www.sitepoint.com/javascript-this-gotchas/$.get$().eachthis

原則として、コールバック関数内で の「外部」値を参照する場合はthis、最初にコールバック内でアクセス可能な変数にバインドする必要があります (この場合、という名前の変数self)。

于 2012-07-01T17:02:45.317 に答える
2

コールバック関数のスコープ内this では ( globalmedia を参照)することはできません。コールバック関数$.get()内では、何か他のものを参照しますが、 は参照しません。$.get()thisglobemedia

したがって、次のように参照されるthis外部の参照を保持します。$.get()globalmedia

      $("globemedia").each(function(index, value) {
            var globeIDxMedia = $(this).attr("id");

            // keep referece to this
            // ie. globemedia

            var media = $(this);
            $.get("getmedia.jsp?mediaID="+globeIDxMedia,function(a){

                // here self refers to
                // globemedia element

                media.html(a);

            });

        });

ノート

$("globemedia")あるべきだと思います$(".globemedia")。つまり、classセレクターを使用する必要があります。

独自のカスタム HTML タグを作成することはできません。こちらをご覧ください

独自の HTML タグ (ここでは ) を作成することはできないためglobalmedia、その代わりにdata属性を使用できます。例えば:

<div data-globalmedia="media1" id="id_1">Media 1</div>
<div data-globalmedia="media2" id="id_2">Media 2</div>

等々。jQueryの場合、次を使用できます。

$('[data-globalmedia]').each(function() {
    var globeIDxMedia = $(this).attr("id");

    // keep referece to this
    // ie. globemedia
    var self = $(this);
    $.get("getmedia.jsp?mediaID=" + globeIDxMedia, function(a) {

        // here self refers to
        // globemedia element
        self.html(a);

    });
});

作業サンプル

于 2012-07-01T17:02:08.477 に答える