2012-01-05 11 views
61

tengo esta línea de código:Cómo utilizar en jQuery: no, y hasClass() para obtener un elemento específico sin una clase

$('#sitesAccordion .groupOfSites').click(function() { 
    var lastOpenSite = $(this).siblings().hasClass(':not(.closedTab)'); 
    console.log(lastOpenSite); 
}); 

me sale "falso" en vez de conseguir uno de los otros elementos (asumiendo que hay uno, y debe haberlo). Supongo que el problema es con:

.hasClass(':not(.closedTab)'); 

¿Cuál es el problema?

Mi propósito es crear mi propia acordeón (sin usar jQuery UI)

y estoy tratando de escribir así:

$('#sitesAccordion .groupOfSites').click(function() { 

    //Get the last opened tab 
    var lastOpenSite = $(this).siblings().hasClass(':not(.closedTab)'); 

    //Close last opened tab and add class 
    lastOpenSite.hide().toggleClass('closedTab'); 

    //Open the current Tab 
    $(this).children('.accordionContent').toggle('fast'); 

    // remove class from open tab 
    $(this).toggleClass('closedTab'); 


}); 

¿Es esta la mejor manera? gracias, Alon

Respuesta

94

Utilice la función not lugar:

var lastOpenSite = $(this).siblings().not('.closedTab'); 

hasClass sólo comprueba si un elemento tiene una clase, not eliminará elementos de la conjunto seleccionado coincida con el selector proporcionado.

+0

ohh - eso fue un error tonto que hice - ¡gracias por la respuesta! – Alon

7

El método hasClass() de jQuery devuelve un valor booleano (verdadero/falso) y no un elemento. Además, el parámetro que se le debe dar es un nombre de clase y no un selector como tal.

Por ejemplo: x.hasClass('error');

71

Es mucho más fácil hacerlo de esta manera:

if(!$('#foo').hasClass('bar')) { 
    ... 
} 

El! frente a los criterios significa falso, funciona en la mayoría de los lenguajes de programación.

+0

Esto no funcionará para lo que el OP intenta hacer. Simplemente prueba si '# foo' tiene una clase o no, no reduce el conjunto de elementos emparejados a los que lo tienen. –

+0

thx. está trabajando. – mboeckle

+3

de esta manera funciona bastante bien en mi situación totalmente diferente. Gracias. – richfinelli

1

No sé si esto era cierto en el momento de la publicación original, pero el método permite selectores hermanos, por lo que una reducción de lo que el PO de la lista deben trabajo.

$(this).siblings(':not(.closedTab)'); 
Cuestiones relacionadas