我知道我的问题措辞不多但我不知道怎么说更好......
我实际上使用.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)..
答案 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';
}
})