2012-07-26 86 views
0

$(this).siblings()回报:语法混乱

[<section style class=​"white">​…​</section>​ 
, <section style class=​"white">​…​</section>​ 
, <section style=​"display:​ none">​…​</section>​ 
, <section style=​"display:​ none">​…​</section>​ 
, <section style=​"display:​ none">​…​</section>​ 
, <section style=​"display:​ none">​…​</section>​ 
, <section style=​"display:​ none">​…​</section>​] 

所以有7个部分,其中的两个(currrently)具有类white。一旦parent()部分是隐藏的,我不能再使用的代码:

var hidden = ($(this).siblings().filter(':visible').length); 

,看看有多少是可见的,我需要计数是白色的类。很长一段时间,我能得到这个工作:

var hidden=0; 
$(this).siblings().each(function(){ 
    if ($(this).hasClass('white')) {hidden++;}; 
}); 

为什么我通过每一个同级不必循环,不能用一个下面,或另外一个符合'white'类来算的:

var hidden = ($(this).siblings().filter(':white').length); or 
var hidden = ($(this).siblings().filter('white').length); 

var hidden = ($(this).siblings().hasClass('white').length); 

var hidden = ($(this).siblings().is(':white').length); or 
var hidden = ($(this).siblings().is('white').length); 
+2

请将您的HTML发布。或者一个jsFiddle。 – j08691 2012-07-26 15:28:23

+0

提示:使用'$('。fs.btn.heading.abstract')'不是一个好主意 – diEcho 2012-07-26 15:30:38

+0

对不起,那是确定我正在测试的特定元素,我已经编辑过。为什么它不是一个好主意?我是JQuery的新手。 – 2012-07-26 15:48:48

回答

4

为什么要经历.filter().hasClass(),.is()和循环的麻烦? Can't you use .sibling()'s argument to filter the siblings instead并获得那些“白色”?

$(this).siblings('.white').length 
+0

啊是的!用'。'来表示班。然而,我不知道你可以传递一个参数给兄弟()。我也可以在这行中传递':visible':'var hidden =($(this).siblings()。filter(':visible')。length);'make it:'var hidden =($(this ).siblings( ':可见')的长度);'。? – 2012-07-26 15:37:00

+0

是的。 [文档说'[选择器]'](http://api.jquery.com/siblings/)这意味着*任何有效的选择器* – Joseph 2012-07-26 15:46:18