这可能很简单,但似乎无法让它发挥作用。
我有以下代码:
<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'是否有问题?
谢谢!
答案 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();
}
});