我意识到$(this)
在AJAX之外运作良好,但在AJAX内却无法运作,有人可以帮忙看看它是什么错误或我可以做什么吗?
$(function() {
$(".add_friend").each(function () {
var a=$(this).closest('div').find('#user').html();
$.post("check_following.php", {username:a}, function(resp) {
if (resp=='following') {
$(this).hide();
}
});
});
});
答案 0 :(得分:1)
启动新功能时,this
的上下文将改变。您必须以某种方式缓存值。这种情况通常是我在相同情况下使用的:
$(function() {
$(".add_friend").each(function() {
var $this = $(this); // Cache it here.
var a = $this.closest('div').find('#user').html();
$.post("check_following.php", {
username: a
}, function(resp) {
if (resp == 'following') {
$this.hide();
}
});
});
});
答案 1 :(得分:0)
这是一个范围问题,每当您在jQuery中将一个函数放到另一个函数中时,范围都不同
在第一级选择器$(“。add_friend”)。each(function(){..})中,您引用的是针对选择器找到的每个迭代,在本例中为具有类'.add_friend'的元素。
在第二级上,ajax调用$(this)内部不再包含元素引用。您需要将第一级的引用放在变量内,以便可以在另一级范围内使用。
使用.text()方法代替.html()也是一个好主意
因此,如果在#user元素中仅获得文本,则放置在#user元素中的选择符$ this.closest('div')。find('#user ').html();会返回“文本<i></i>
”,但是如果每次只需要文本,则使用.text()更安全,也可以使用.trim()来删除字符串中的所有empy空间>
<i></i>