2012-04-13 12 views
11

Im contando i miei elementi li con il seguente script jQuery:elementi Conte li che sono visibili con 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); 
    }); 

- > Lo script restituisce:

ho modificare la proprietà style="display: none" di alcuni degli elementi li quando $(document).ready con jQuery, come: $('.2').show();

Ora voglio modificare lo script in modo da contare solo gli elementi li visibili con il seguente script (ho appena aggiunto: visibile seguendo la documentazione jQuery):

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

-> lo script restituisce: nulla

non ho idea perché non funziona o ut - forse qualcuno ha qualche consiglio o idea? Qualsiasi aiuto è molto apprezzato. Grazie in anticipo!

+0

** Grazie a tutti! ** penso poi , il mio problema è altrove nel codice - Comunque è strano, visto che lo script couting sta funzionando, ma quando aggiungo ': visible' si blocca. Tuttavia ora sto usando una soluzione alternativa. Quando cambio il display: none css property Sto aggiungendo una classe '.addClass (" countme ")' agli elementi li che sono visibili. Sto contando tutti gli elementi li che hanno la classe 'li.countme' Grazie per il vostro aiuto! – Dominic

risposta

16

lavoro bene per me

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

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

+0

Grazie RVSharepoint per l'aiuto e i suggerimenti. – Dominic

8

funziona bene qui:

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

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

Ora, utilizzando i numeri come nomi delle classi è illegale. (W3C Spec, punto 2) I nomi delle classi devono iniziare con una lettera. Forse fare manipolazioni con questo sta causando problemi?

Oltre a questo, posso solo immaginare che il tuo problema sia altrove. Stai usando l'ultima versione di jQuery? (Anche se nei miei test, funziona fino alla 1.3, e poi non funziona affatto)

Ti sei sbagliato a digitare "visibile" nel tuo codice attuale. (Ho fatto prima)

+0

Grazie Jeff per i tuoi suggerimenti! – Dominic

1

E funziona così:

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

si può vedere ad esempio there lavoro.

+0

Grazie per il tuo suggerimento, PrimosK – Dominic

0

Lo script non restituisce nulla perché tutti i DIV sono nascosti. Restituisce 1 quando viene mostrato 1.

+1

Resterà ancora "0" quando tutti sono nascosti. –

+0

Sono stato corretto. – ONOZ

1

Sì, come tutti hanno già detto, funziona benissimo, anche quando si.show() l'elemento doc pronto:

http://jsfiddle.net/bKyt4/

+0

Grazie per i tuoi suggerimenti! – Dominic

0

Ho provato questo fuori e sembra funzionare cioè ho un risultato di '1'.

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

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

NB: non credo che avere i numeri per il valore di un attributo è valido markup

+0

Grazie Peter - Penso che il mio problema sia altrove - Comunque è strano, visto che il couting funziona, ma quando aggiungo: visibile si blocca. Tuttavia ora sto usando una soluzione alternativa. Quando cambio il display: none css property Sto aggiungendo una classe '.addClass ("countme")' agli elementi li che sono visibili. Sto contando tutti gli elementi li che hanno la classe li.countme Grazie per il vostro aiuto! – Dominic

+0

Nessun problema. felice di aiutare – Peter

2

Elemento assunto come nascosto se esso o dei suoi genitori non consuma spazio nel documento. La visibilità CSS non viene presa in considerazione.

Vista:

<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); 
});​ 

ho fatto un jsfiddle per voi: http://jsfiddle.net/mgrcic/3BzKT/3/

+0

Grazie per la vostra risposta. Con l'idea della classe "nascosta", aggiungo ora un "countme" di classe a ogni elemento con cui sto cambiando .show() e funziona perfettamente! – Dominic

+0

contento che abbia aiutato. –

0

In linea uno semplicemente definire un div o frammento o un paragrafo in cui si desidera visualizzare conteggio, e in seconda linea l'ul contenente li

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