2011-04-11 41 views
0

我需要检查以确保父容器的所有子元素都具有特定的类。有人能告诉我如何在jQuery中做到这一点?如何确保所有元素在jQuery中包含特定的类?

如果div标签的所有段落标记有类“正确的”

- >是的,所有的人都将获得该类

否则,不是div标签的所有段落标记有类

- > noope,他们都没有所需的类

回答

3

如果你的意思直接孩子,那么:

if ($('div').children('p').length === $('div').children('p.correct').length) { 
    // yes 
} 
else { 
    // no 
} 

要在心目当中所有后代<p>标签,使用 “.find()” 而不是 “孩子()”。

编辑 —它会是渴望有这样的东西,一个插件:

$.fn.all = function(pred) { 
    var rv = true; 
    this.each(function(element) { 
    if (!pred(element)) return (rv = false); 
    }); 
    return rv; 
}; 

然后,你可以写:

if ($('div p').all(function(p) { return p.hasClass('correct'); })) { 
    // yes 
} 

类似 “.ANY()” 函数也会有用。

+0

谢谢,不 - 他们不是直接的孩子。 – Cofey 2011-04-11 18:51:19

+0

@Cofey ok然后使用“.find()” - 同样,如果你的页面真的很大,那么为了避免两个单独的jQuery页面搜索将会更快一些代码。如果页面不是太大,并且这不是频繁运行的,那么您将不会注意到性能问题。 – Pointy 2011-04-11 18:53:35

0
function doTheyReally() { 
    return $('parentSelector').children('p').size() == $('parentSelector').children('.correct').size(); 
} 

编辑

here's a jsfiddle你可以用这段代码测试。祝你好运!

0

几种方法映入脑海(如经常用jQuery的情况下)

一个,算上div标签$('div').find('p').length内段落标记的数量,并带有段落标记的DIV 内用数字比较$('div').find('p.class').length

该弹簧想到的第二种方式,所需要的类是使用jQuery的过滤器()方法:

var childParagraphs = $('div').find('p'); 
if (childParagraphs.length == childParagraphs.filter('p.class').length) 
{ 
    // true 
} 

也可以通过一个如果您需要更复杂的规则(与“has-class”相对),则可以使用filter()方法的回调函数

另一种想到的方法是检查是否存在与“has类“选择器。

if ($('div').find('p').not('.class').length == 0) 
{ 
    // true 
} 

希望有帮助。

+0

@Cofey刚才注意到你的评论如下,在示例中更新为使​​用find()。 – 2011-04-11 18:59:03