2014-02-24 54 views
-1

我有一个是这样的(我手动输入一些这方面的插件生成的HTML,请不要介意错误:添加类过滤元件

<div class="pluginoutput"> 
<p>PersonName</p> 
<p>MyData</p> 
<p>Null</p> 
<p>Null</p> 
<p>Null</p> 
</div> 

<div class="pluginoutput"> 
<p>PersonName</p> 
<p>Null</p> 
<p>Null</p> 
<p>Null</p> 
<p>Null</p> 
</div> 

我需要的是方法来隐藏含有“空”的小于四个实例的DIV

我有这样的变量,其过滤那些具有4个空值:

var m = $('div.pluginoutput:contains("PersonName")').filter(function(){return(this).find('p:contains("Null")').length == 4;}); 

而这种过滤掉具有少于四个“空值”的一个:

var n = $('div.pluginoutput:contains("PersonName")').filter(function(){return(this).find('p:contains("Null")').length < 4;}); 

现在我想隐藏n。 我试图

$(n).addclass("hidden"); 

$('div.pluginoutput:contains("PersonName")').filter(function(){return(this).find('p:contains("Null")').length < 4;}).addClass("hidden"); 

但这并不出于某种原因。我做错了什么?谢谢。

+1

有用的提示,看看Chrome浏览器开发工具,并学习如何调试代码。一个简单的'console.log'会告诉你这些变量(m和n)不包含你正在寻找的值。 – Valentin

+1

@Valentin:或者更好,而不是'console.log',调试器和检查代码时的事情。 –

+0

其实他们这样做。我没有改变任何代码,除了添加$(变量).hide()作为第一个评论者的建议。 –

回答

0

您的代码中有错字。它应该是.addClass

n.addClass("hidden"); 

当谈到隐藏它们,你可以简单地使用:

n.hide() 
+1

还要注意,'n'已经*了一个jQuery对象,不需要再次调用'$()'。 –

+0

@ T.J.Crowder:谢谢。 –

+0

'$(q).hide();'工作。谢谢 –

1

在你filter回调,你正在做的:

(this) 

...,你可能想要

$(this) 

例如:

var n = $('div.pluginoutput:contains("PersonName")').filter(function(){return(this).find('p:contains("Null")').length < 4;}); 
// Need $ (with space in front) here ----------------------------------------^ 

您还使用addclass,你应该使用addClass,并作为n已经 jQuery的情况下,你不想再打电话就可以了$()

所以解决问题(this)上面,然后

n.addClass("hidden"); 
0

您需要更改this$(this)。您还可以使用addClass()直接在过滤后:

var n = $('div.pluginoutput:contains("PersonName")').filter(function(){return $(this).find('p:contains("Null")').length < 4;}).addClass("hidden"); 

Fiddle Demo