2013-03-26 110 views
0

这可能是一个简单的但我似乎无法得到它的工作。JQuery .hide ...不隐藏

我有以下代码:

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

从本质上讲,我试图写一个隐藏了李的功能,如果跨度== 0的内容这是jQuery的代码,但它不工作出于某种原因:

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

因此,在这种情况下,我得到的第丽(因为跨度== 0的内容),但李并不能掩盖一个警报。

在这种情况下使用“this”是否存在问题?

谢谢!

+0

究竟你认为'this'是在JavaScript? ;)由于你的if语句的主体周围不包括'{'和'},所以你的提醒也会一直激发,这是不好的做法 – 2013-03-26 00:46:33

+0

你的Javascript代码片段来自哪里?它是在一个jQuery事件处理程序(如点击),一个函数或其他地方? – 2013-03-26 00:48:07

回答

3

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

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

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

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

而且,你不必{}周围的if语句体。这只会导致执行后的第一条语句。

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/

+0

完美 - 如果页面上没有.jSH类,JQuery会抛出一个错误吗? – 2013-03-26 00:56:36

+1

@Angelo,no。它不会。如果集合中没有返回元素,只是简单地忽略。 – 2013-03-26 01:00:46

2

您可以使用$ .filter

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

+1我刚才想用'filter'添加同样的例子! – 2013-03-26 01:09:14

+0

:)谢谢... – PSL 2013-03-26 01:27:37