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 (指的是 globemedia )$.get()回调函数范围内。$.get()回调函数内this指的是别的东西,但不是globemedia

因此,请参考以下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 回答