此对象引用在$ .each中无效

时间:2011-10-19 14:07:15

标签: javascript jquery

为什么foo不会被追加?

$.ajax({
                type: 'GET',
                dataType: 'json',
                cache: false,
                url: 'barfoochakalaka',
                success:
                    function(response) {
                        $.each(response, function(index, val) {                             
                            $(this).parent().parent().append('foo');
                        });

                    }
})

4 个答案:

答案 0 :(得分:4)

因为在each内,this设置为正在迭代的当前元素(docs),所以通常我们在进入之前将this定义为其他内容each循环:

var that = this;
$.each(response, function(index, val) {
    var content = '<div class="link-history">'+ val.date + ', ' + val.userid + ', ' + val.status + '</div>';
    $(that).parent().parent().append('foo');
});

但是,在情况下,AJAX请求的this回调中的success等于发起请求的jqXHR对象,而不是你所追求的DOM元素,所以我们必须将var that = this移到更远的地方;

var that = this;
$.ajax({
    type: 'GET',
    dataType: 'json',
    cache: false,
    url: 'barfoochakalaka',
    success: function(response) {
        $.each(response, function(index, val) {
            var content = '<div class="link-history">' + val.date + ', ' + val.userid + ', ' + val.status + '</div>';
            $(that).parent().parent().append('foo');
        });

    }
})

答案 1 :(得分:3)

var $this = $('#Selector').parent().parent();
$.ajax({
                type: 'GET',
                dataType: 'json',
                cache: false,
                url: 'barfoochakalaka',
                success:
                    function(response) {
                        $.each(response, function(index, val) {
                            var content = '<div class="link-history">'+ val.date + ', ' + val.userid + ', ' + val.status + '</div>';
                            $this.append('foo');
                        });

                    }
})

<小时/> 编辑:

.parent().parent()添加到原始选择器,因此您不会为每个循环调用此

答案 2 :(得分:0)

响应可能不是数组,只是一个字符串。尝试将响应分配给元素,然后使用选择器在执行.each()

之前获取该元素中的所有子元素。

答案 3 :(得分:0)

您的回复不是元素的对象,它很可能是您的选择器(?)的字符串列表,如果它然后使用$($(this))