0

这可能是一个简单的,但我似乎无法让它工作。

我有以下代码:

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

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

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

因此,在这种情况下,我会收到第一个 li 的警报(因为 span == 0 的内容),但 li 并没有隐藏。

在这种情况下使用“this”有问题吗?

谢谢!

4

4 回答 4

3

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

    $('.jSH span').each(function(){
        if ($(this).text() == "0"){
            $(this).closest('li').hide();
            alert("should hide"); 
        }
    });
于 2013-03-26T00:47:54.640 回答
2

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

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

此外,您没有{}if 语句的主体。这将导致仅执行 if 之后的第一条语句。

于 2013-03-26T00:47:43.200 回答
2

您可以使用 $.filter

$('.jSH').filter(function() {
  return $('span',this).text() == "0";
}).hide();
于 2013-03-26T01:02:36.063 回答
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/

于 2013-03-26T00:48:38.677 回答