2013-09-30 3 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 length (= 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 возвращает длину видимого p внутри div.india, а не div. Помогите –

1

случае один и два дифференциала различны, потому что ... (см комментарии в коде)

//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

я нашел, почему метод клон дает другой результат ...

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

вы не может использовать: видимый или: скрытый элемент клонирования, если он не находится в dom. Однако вы можете проверить, есть ли у них определенный класс или нет.

$('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); 
Смежные вопросы