2012-04-13 16 views
11

Im contando mis elementos li con la siguiente secuencia de comandos de jQuery:elementos Conde li que son visibles 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); 
    }); 

- > El script vuelve:

que cambie la propiedad style="display: none" de algunos de los elementos li cuando $(document).ready con jQuery, como: $('.2').show();

ahora quiero cambiar el guión en una manera de contar sólo los elementos li visibles con la siguiente secuencia de comandos (i acaba añadido: visibles después de la documentación de jQuery):

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

-> El script devuelve: nada

no tengo ni idea de por qué no funciona o ut - tal vez alguien tiene alguna sugerencia o idea? Cualquier ayuda es muy apreciada. Gracias por adelantado!

+0

** Gracias a todos! ** creo que entonces , mi problema está en otra parte del código. Sin embargo, es extraño, ya que el script de couting está funcionando, pero cuando agrego ': visible' se bloquea. Sin embargo, ahora estoy usando una solución alternativa. Cuando cambio la pantalla: ninguna propiedad css Estoy agregando una clase '.addClass (" countme ")' a los elementos li que están visibles. Ahora estoy contando todos los elementos li que tienen la clase 'li.countme' Gracias por su ayuda! – Dominic

Respuesta

16

trabajo bien para mí

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

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

+0

Gracias RVSharepoint por su ayuda y consejos. – Dominic

8

funciona bien aquí:

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

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

Ahora, usando números nombres de las clases es ilegal . (W3C Spec, viñeta 2) Los nombres de clase deben comenzar con una letra. Tal vez hacer manipulaciones con eso está causando problemas?

Aparte de eso, solo puedo adivinar que su problema está en otra parte. ¿Estás usando la última versión de jQuery? (Aunque en mis pruebas, funciona todo el camino de regreso a 1.3, y luego no funciona en absoluto)

Escribí mal "visible" en su código actual. (He hecho esto antes)

+0

¡Gracias Jeff por tus consejos! – Dominic

1

funciona así:

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

se puede ver ejemplo there de trabajo.

+0

Gracias por su consejo, PrimosK – Dominic

0

Su secuencia de comandos no devuelve nada porque todas las DIV están ocultas. Devuelve 1 cuando se muestra 1.

+1

Todavía devolverá "0" cuando todo esté oculto. –

+0

Estoy parado. – ONOZ

1

Sí, como todo el mundo ya se ha dicho, que funciona bien, incluso cuando usted.show() el doc elemento de lista:

http://jsfiddle.net/bKyt4/

+0

¡Gracias por tus consejos! – Dominic

0

he intentado esto y parece que funciona es decir consigo una resultado de '1'.

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

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

NB: No creo que con un número para el valor de un atributo es marcado válido

+0

Gracias Peter - Creo que entonces, mi problema está en otra parte - Sin embargo, es extraño, ya que el couting está funcionando, pero cuando lo agrego: visible se cuelga. Sin embargo, ahora estoy usando una solución alternativa. Cuando cambio la pantalla: ninguna propiedad css Estoy agregando una clase '.addClass ("countme")' a los elementos li que están visibles. Ahora estoy contando todos los elementos li que tienen la clase li.countme Gracias por su ayuda! – Dominic

+0

Sin preocupaciones. contento de ayudar – Peter

2

Elemento asumió como oculto o si sus padres no consume espacio en el documento. La visibilidad de CSS no se tiene en cuenta.

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

He hecho una jsFiddle para usted: http://jsfiddle.net/mgrcic/3BzKT/3/

+0

Gracias por su respuesta. Con la idea de la clase "oculta", ahora estoy agregando una clase "countme" a cada elemento que estoy cambiando con .show() ¡y funciona bien! – Dominic

+0

me alegro de que haya ayudado. –

0

En línea uno simplemente definir un div o el intervalo o un párrafo en el que desea mostrar el recuento, y en la segunda línea de la ul li contiene

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