2013-09-30 84 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);