selectores - selector por atributo jquery
¿Qué selector de JQuery excluye elementos con un elemento primario que coincida con un selector determinado? (7)
yo tengo
var $set = $(''.foo,.bar'').filter(
function() {return $(this).parents(''.baz'').length < 1;});
como una forma de seleccionar todos los elementos cuyas clases son foo
o bar
y que no descienden de un elemento cuya clase es baz
. ¿Hay un selector que logre lo mismo sin la necesidad de un filtro lambda?
<div class=''foo''/><!--match this-->
<div class=''bar''/><!--match this-->
<div class=''baz''>
<div class=''foo''/> <!--don''t match this-->
</div>
Agregue a: not (''. Baz'') a su selector de nivel superior.
El selector caos da debería funcionar:
$(''.foo:not(.baz .foo),.bar:not(.baz .bar)'')
Solo quería darle un consejo sobre una extensión de FireBug llamada FireFinder que puede usar para probar los selectores css / jquery.
Desde el sitio web: Firefinder es una extensión de Firebug (en Firefox) y ofrece la funcionalidad para, de manera rápida, encontrar elementos HTML que coincidan con los selectores CSS seleccionados o la expresión XPath. Le permite probar instantáneamente sus selectores CSS en la página mientras ve el contenido al mismo tiempo, y se resaltarán los elementos coincidentes.
La verdad del asunto es que jQuery simplemente no tiene una manera particularmente elegante de hacer lo que quiere. Si bien la respuesta del caos funciona, debe preguntarse si el selector complicado (que sería tan lento como un selector en una página web complicada) lo vale más que la función de filtro más detallada pero más rápida que tiene. Esto no es tan importante, estoy cansado de los selectores especialmente largos y complicados cuando puedo evitarlo.
Una opción diferente es crear tu propio selector, ya que jQuery es increíble:
jQuery.expr['':''].parents = function(a,i,m){
return jQuery(a).parents(m[3]).length < 1;
};
$(''.foo,.bar'').filter('':parents(.baz)'');
El mapa expr
es parte del motor de selección Sizzle y la documentación se puede encontrar aquí: Pseudo-Selectores personalizados Sizzle
No pude hacer que esto funcione:
$(".children:not(#parent .children)");
Pero puedo hacer que esto funcione:
$(".children").not($("#parent .children"));
Nota: No estoy seguro si esto tiene algo que ver con la versión de jQuery que estoy usando 1.2.6
prueba este:
$(''div'')
.filter(function () {
return ($(this).parent().not(''.baz''));
})
var $li = jQuery(''li'', this).not(''.dropdown-menu > li'');
Estoy usando el tema Roots y cambian las listas desplegables de ''sub-menu'' a ''.dropdown-menu''
$(''.foo:not(.baz .foo),.bar:not(.baz .bar)'')