2013-09-30 83 views
1

我认为这是一个小问题,但我卡住,不知何故。计算jQuery文本()。可见元素的长度而不删除隐藏元素

考虑下面的代码

HTML:

<div class="india"> 
    <p class="hidden"> Uttar Pradesh </p> 
    <p> Andhra Pradesh </p> 
    <p class="hidden"> Uttar Pradesh </p> 
    <p> Andhra Pradesh </p> 
</div> 

CSS:

.hidden{ 
    display: none; 
} 

JAVASCRIPT:

/* Case 1: No of char inside div when hidden elements are removed 
RETURNS 53 */ 
$('div.india').find(":hidden").remove(); 
alert($('div.india').text().length); 

现在我想回到山姆e长度(= 53)而不移除隐藏的元素。我曾尝试做以下事情(一个接一个/或单独类似的div),但它们都返回不同的长度

如何在不移除隐藏元素的情况下返回相同的长度?解释为什么他们是不同的长度欢迎!

链接:http://jsfiddle.net/deveshz/R2QNM/1/

// Without Removing hidden div RETURNS 32 
/*Case 2: */ 
alert($('div.india').find(":visible").text().length); 

/* Case 3 */ 
var charlength = 0; 
$('div.india').find(":visible").each(function(){ 
    charlength += $(this).text().length; 
}); 
alert(charlength); 

/*Case 4 RETURNS 21*/ 
var clone = $('div.india').clone(); 
clone.find(":hidden").remove(); 
alert(clone.text().length); 
+0

看起来像第一个长度调用包含空格和可能的回车。 'alert($('div.india')。find(“:visible”)。text()。length);'犯规。尝试提醒长度警报之前的实际文字,你会看到区别 –

回答

1

基于@kasper的投入和@Richard

我试着这样做:

警报($( 'div.india')文本() .length - $('div.india')。find(“:hidden”)。text()。length);

并得到了正确的答案。感谢您的帮助。

现在,这将是一个很大的问题,如果我们能找出为什么克隆返回21

+0

@kasper:让我知道是否有任何其他方式,而不是减法。 –

2

$('div.india').find(":hidden").remove(); 
alert($('div.india p').text()); 
alert($('div.india p').text().length); 

似乎给了相同的结果

alert($('div.india').find(":visible").text().length); 
alert($('div.india').find(":visible").text()); 

当我测试

+0

是的@kasperTaeymans提到。但我的问题是我怎样才能得到53的长度而不删除div。我已经理解CASE 2在div.india中返回可见p的长度而不是div本身。请帮助 –

1

情况下,一个,两个是差异erent因为...(参见代码中的注释)

//Case 1: No of char inside div when hidden elements are removed 
    RETURNS 53 */ 
    $('div.india').find(":hidden").remove(); 
    alert($('div.india').text().length);//here your selector is a div 
    alert($('div.india p').text().length);//here it is a p tag... ->32 



    // Without Removing hidden div RETURNS 32 
    /*Case 2: */ 
    alert($('div.newindia').find(":visible").text().length);//here your selector points to a visible p tag 

我在想克隆案...: -/

编辑:我的回答已移除部分,因为我做错了什么事在的jsfiddle

+0

更新的答案。 –

+1

但是我怎样才能得到div的数量。我的意思是53的价值而不是32而不去除。我明白了CASE 2的原因! –

+0

再次更新:-) –

1

我发现为什么clone方法给出其他结果...

http://jsfiddle.net/kasperfish/R2QNM/3/

你如果不在dom中,则不能使用:visible或:隐藏在克隆元素上。但是,你可以检查他们是否有特定的课程。

$('div.india').find(":hidden").remove(); 
alert('not clone '+$('div.india').text().length); 


var clone = $('div.newindia').clone(); 

alert('clone '+ clone.find("p:not(.hidden)").text().length);