2012-04-13 6 views
11

Im licząc moich elementów li z poniższego skryptu jQuery:elementy Hrabia li, które są widoczne z jQuery

HTML:

<ul class="relatedelements"> 
    <li style="display:none;" class="1">anything</li> 
    <li style="display:none;" class="2">anything</li> 
    <li style="display:none;" class="3">anything</li> 
</ul> 

jQuery:

$(function() { 
     var numrelated=$('.relatedelements > li').length; 
     $('.num-relatedelements').html(numrelated); 
    }); 

- > Skrypt zwraca:

zmienić właściwość niektórych elementów li style="display: none" gdy $(document).ready z jQuery, jak: $('.2').show();

Teraz chcę zmienić skrypt w taki sposób, aby liczyć tylko elementy widoczne li z poniższym skrypcie (i tylko dodał: widoczna po docs jQuery):

$(function() { 
     var numrelated=$('.relatedelements > li:visible').length; 
     $('.num-relatedelements').html(numrelated); 
    }); 

-> skrypt Powroty: nic

nie mam pojęcia, dlaczego to nie działa o ut - może ktoś ma jakąś wskazówkę lub pomysł? Każda pomoc jest bardzo doceniana. Z góry dziękuję!

+0

** Dzięki dla wszystkich! ** myślę następnie , mój problem jest gdzie indziej w kodzie - jednak jest dziwny, jak działa skrypt couting, ale kiedy dodaję ': visible' to się zawiesza. Jednak obecnie używam obejścia. Kiedy zmieniam ekran: brak właściwości css Dodaję klasę '.addClass (" countme ")' do widocznych elementów li. Teraz liczę wszystkie elementy li, które mają klasę "li.countme" Dzięki za pomoc! – Dominic

Odpowiedz

16

praca dobrze dla mnie

$(document).ready(function(){ 
    $('.2').show(); 
    var numrelated=$('.relatedelements > li:visible').length; 
    $('.num-relatedelements').html(numrelated); 
});​ 

JsFiddle Lind: http://jsfiddle.net/xuckF/1/

+0

Dzięki RVSharepoint za pomoc i wskazówki. – Dominic

8

działa dobrze tutaj:

http://jsfiddle.net/jtbowden/FrPPr/ (1 widoczny)

http://jsfiddle.net/jtbowden/FrPPr/1/ (0 widoczne)

Teraz, używając liczb jako nazw klas jest nielegalne. (W3C Spec, punktor 2) Nazwy klas muszą rozpoczynać się od litery. Może manipulowanie z tym powoduje problemy?

Poza tym, mogę się tylko domyślać, problem jest gdzie indziej. Czy używasz najnowszej wersji jQuery? (Chociaż w moich testach działa z powrotem do wersji 1.3, a następnie nie działa w ogóle)

Czy błędnie napisałeś "widoczny" w faktycznym kodzie. (Robiłem to już wcześniej)

+0

Dzięki Jeff za wskazówki! – Dominic

1

To działa tak:

$(function() { 
    var numrelated=$('.relatedelements > li:visible').length; 
    $('.num-relatedelements').html(numrelated); 
}); 

można zobaczyć przykładowe there pracy.

+0

Dzięki za wskazówkę, PrimosK – Dominic

0

Twój skrypt nic nie zwraca, ponieważ wszystkie DIV są ukryte. Zwraca 1 po wyświetleniu 1.

+1

Powoduje to powrót do "0", gdy wszystkie są ukryte. –

+0

Stoję poprawione. – ONOZ

0

Próbowałem to na zewnątrz i wydaje się działać tj dostaję wynik "1".

$(function() { 
    $('.2').show(); 

    var numrelated=$('.relatedelements > li:visible').length; 
    $('.num-relatedelements').html(numrelated); 
}); 

NB: Nie sądzę o liczbie do wartości atrybutu jest prawidłowych znaczników

+0

Dziękuję Peter - Myślę, że wtedy mój problem jest gdzie indziej - Jednak jest to dziwne, ponieważ couting działa, ale kiedy dodam: widocznie to się psuje. Jednak obecnie używam obejścia. Kiedy zmieniam ekran: brak właściwości css Dodaję klasę '.addClass ("countme")' do widocznych elementów li. Teraz liczę wszystkie elementy li, które mają klasę li.countme Dzięki za pomoc! – Dominic

+0

Bez obaw. Cieszę się, że mogę pomóc – Peter

2

Element przyjęto jako ukryty lub jeśli jego rodzice nie zużywa miejsca w dokumencie. Widoczność CSS nie jest brana pod uwagę.

Widok:

<ul class="relatedelements"> 
    <li class="1 hidden">anything</li> 
    <li class="2 hidden">anything</li> 
    <li class="3 hidden">anything</li> 
    <li class="4">anything</li> 
    <li class="5">anything</li> 
    <li class="6">anything</li> 
    <li class="7 hidden">anything</li> 
</ul> 

<div class="num-relatedelements"></div> 

CSS

.hidden { 
    display: none; 
}​ 

JS

$(function() { 
    var numrelated= $('.relatedelements > li:not(.hidden)').length; 
    alert(numrelated); 
    $('.num-relatedelements').html(numrelated); 
});​ 

Zrobiłem jsfiddle dla Ciebie: http://jsfiddle.net/mgrcic/3BzKT/3/

+0

Dziękuję za odpowiedź. Z myślą o "ukrytej" klasie, teraz dodaję klasę "countme" do każdego elementu, który zmieniam za pomocą .show() i działa dobrze! – Dominic

+0

cieszę się, że pomogło. –

0

W jednej linii po prostu określić div lub rozpiętości lub akapit, w którym ma być wyświetlany licznik, aw drugiej linii ul zawierających li

$('.notify').html(
$('#ul-notifications li').length);