.each()循环中的$ .get(),获取$ .get中的$(this)

时间:2014-07-18 19:15:22

标签: jquery html css ajax

我知道我的问题措辞不多但我不知道怎么说更好......

我实际上使用.each()循环,在这个循环中,我必须更改当前项的css()参数,但我没有成功..

这是我的代码:

$(document).find('.test').find('p').each(function(){
    var test=$(this).css('background-image').split('(')[1].split(')')[0];
    var retGet=$.get(test);
    $(this).css({
        'background-image':  'url(data:image/png;base64,'+retourGet.responseText+')'
    }); 
});

我删除了网址编辑的部分(第二行给了我实际的网址,我编辑了它)。

当我使用此代码时,我的css参数中未定义...似乎当我尝试更改背景图像时,$ .get加载未结束...

我试着这样做:

$.get( test, function( data ) {

});

但我不知道如何在这里访问.each()$(this)..

4 个答案:

答案 0 :(得分:2)

尝试使用each函数中的参数:

$(document).find('.test').find('p').each(function(idx, item){
    var test=$(item).css('background-image').split('(')[1].split(')')[0];
    var retGet=$.get(test);
    $(item).css({ // item is the current .test object
        'background-image':  'url(data:image/png;base64,'+retourGet.responseText+')'
    }); 
});

如果您想使用.get的回调,可以使用item变量:

$.get( test, function( data ) {
 $(item).css({ // item is the current .test object
        'background-image':  'url(data:image/png;base64,'+data+')'
    }); 
});

答案 1 :(得分:0)

有两种可能的解决方案。首先是使用@celerno描述的方法(可能是首选解决方案)

其次是使用函数绑定来正确设置this指针。

$.get( test, function( data ) { $(this) // will now work }.bind(this));

编辑:本机绑定方法仅在支持ECMAScript 5及更高版本的浏览器中实现。所以使用这种方法不适用于旧浏览器。 (IE8及以下我认为)

答案 2 :(得分:0)

你使用每个的i和val(索引和值)参数:

$(document).find('.test').find('p').each(function(i, val){
    var test=$(val).css('background-image').split('(')[1].split(')')[0];
    var retGet=$.get(test);
    $(val).css({
        'background-image':  'url(data:image/png;base64,'+retourGet.responseText+')'
    }); 
});

请注意,function()替换为function(i,val),$(this)替换为$(val)请参阅更多信息:http://api.jquery.com/jquery.each/

(之前遇到过这个问题 - 让我感到沮丧)

答案 3 :(得分:0)

没有你的小提琴,我无法真正解决你的问题。 但是我刚才遇到了一些安静的事情。

你可以测试一下:http://codepen.io/gc-nomade/pen/bscaF

评论应该解释:

$(".test").children().each(function() {
  var domel= $(this).get(0);
  $(this).attr("data-tag",domel.nodeName);

   if ( domel.nodeName == 'P' ) {
   var test=$(this).css('background-image').split('(')[1].split(')')[0];
    var retGet=$.get(test);   
    // this.style.background = 'url(data:image/png;base64,'+retourGet.responseText+')';// does not work here out of context
    //  this.css('background','blue'); //does not work
   this.style.background = 'red';
   }
})