JQuery .hide ......没有隐藏

时间:2013-03-26 00:44:12

标签: javascript jquery

这可能很简单,但似乎无法让它发挥作用。

我有以下代码:

<ul>
    <li class='jSH'>Users: <span>0</span></li>
    <li class='jSH'>Cars: <span>1</span></li>
</ul>

本质上,我正在尝试编写一个隐藏li的函数,如果span == 0的内容。这是jquery代码,但由于某种原因它不起作用:

if ($('.jSH span').text() == "0")
    $(this).closest('li').hide();
    alert("should hide");

所以,在这种情况下,我得到第一个li的一个警报(因为span的内容== 0),但是li没有隐藏。

在这种情况下使用'this'是否有问题?

谢谢!

4 个答案:

答案 0 :(得分:3)

您可能希望使用.each,因为您当前的代码返回多个对象及其内容 - .each会将它们分成一个类似循环的过程,其中每个单独的元素都将被处理。 小提琴:http://jsfiddle.net/fEEFq/
Javascript代码:

    $('.jSH span').each(function(){
        if ($(this).text() == "0"){
            $(this).closest('li').hide();
            alert("should hide"); 
        }
    });

答案 1 :(得分:2)

你的问题在$(this) - 这在jQuery的上下文中,只在事件回调中有效(例如鼠标悬停或点击)。您应该将该行修改为:

$('.jSH span').closest('li').hide();

此外,if语句的主体周围没有{}。这将只导致if执行后的第一个语句。

答案 2 :(得分:2)

您可以使用$ .filter

$('.jSH').filter(function() {
  return $('span',this).text() == "0";
}).hide();

答案 3 :(得分:1)

您将this引用到条件语句中,该语句不会返回您想要的结果。

相反:

$('.jSH span').each(function(){
    if ($(this).text() == "0"){  // now `this` is referring to every span in the jQuery collection
        $(this).closest('li').hide();
    }
});

http://api.jquery.com/each/