如果语句以$(this)失败,但是使用绝对值

时间:2010-11-18 11:23:53

标签: javascript jquery if-statement

我遇到了这个非常奇怪的场景。 这不会隐藏H1:

if ($('#content h1').hasClass('active')) {
    $(this).hide();
}

只有这样:

if ($('#content h1').hasClass('active')) {
    $('#content h1').hide();
}

为什么我不能使用(这个)?脚本有问题吗?

4 个答案:

答案 0 :(得分:3)

这是正确的行为。在if语句this语句的上下文中,不包含对h1元素的引用,而是document元素(如果您在函数内部,则为函数)。

答案 1 :(得分:0)

你可以这样做:

$('#content h1').foreach(function() {
    if (!$(this).hasClass('active')) {
        $(this).hide();
    }
});

在这种情况下,正如Jan解释的那样,这将在您期望的上下文中(标题元素)。

答案 2 :(得分:0)

你想要的可能是

var h1 = $('#content h1')
if (h1).hasClass('active')) {
    h1.hide();
}

如上所述,您的“此”将不会引用您的对象。

答案 3 :(得分:0)

语句$('#content h1').hasClass('active')返回一个布尔值(true或false),而不是jQuery对象,这是您尝试使用$(this)的对象。请参阅hasClass here的使用情况。

如果您尝试对与某个选择器匹配的所有元素执行操作,请尝试使用此选择器:

$("#content h1.active").hide();

这会查找id属性为“content”的所有元素,其中包含h1元素,其中class属性为“active”,并将其全部隐藏。