2010-11-18 5 views
3

J'essaie de faire un appel Ajax sur tous les éléments <a> à l'intérieur de l'ID #filter qui n'ont pas la classe .noAjax et de toute façon je ne peux pas le faire fonctionner. quelqu'un pourrait jeter un oeil à ma syntaxe s'il vous plaît?Le sélecteur jQuery .not fonctionne-t-il avec .delegate?

$("#filter").not($("a.noAjax")).delegate("ul#portfolio-list li a", "click", function() { 
    if ($.browser.msie) { 
     location.hash = "#/" + this.pathname; 
    } else { 
     location.hash = this.pathname; 
    } 
    return false; 
}); 

lorsque je tente d'utiliser simplement a ou a.ajax (qui i bien sûr ajouté avant d'essayer) que le sélecteur pour .delegate ne fonctionne pas du tout. avec le jquery au-dessus des œuvres ajax, mais il tente de charger le contenu même lorsque je clique sur un lien avec a.noAjax

Répondre

10

Utilisez le lieu sélecteur :not():

$("#filter").delegate("ul#portfolio-list li a:not(.noAjax)","click",function() { 
    if ($.browser.msie) { 
     location.hash = "#/" + this.pathname; 
    } else { 
     location.hash = this.pathname; 
    } 
    return false; 
}); 

Ou vous pouvez déléguer à l'élément ul à la place, puisque il utilise un identifiant unique, pour améliorer les performances de sélection:

$("#portfolio-list").delegate("li a:not(.noAjax)", ...); 
+0

grâce à toutes vos réponses. mais quelle est la différence entre utiliser .not et: pas s'il y en a? – tobiasmay

+1

@tobias: '.not' est une méthode de filtrage qui s'exécute sur un ensemble d'éléments déjà obtenu. ': not' est un sélecteur qui s'exécute pendant la requête pour les éléments. 'delegate()' n'exécute pas le sélecteur avant l'événement click, c'est pourquoi vous avez besoin du sélecteur au lieu de la méthode. –

+0

merci pour la clarification - juste mettre la main sur jquery. – tobiasmay

0

Ce:

$("#filter").not($("a.noAjax")). 

devrait être mis sur les a éléments, comme ceci:

$("#filter a").not("a.noAjax") 

Ou, ce que vous êtes vraiment après:

$("#portfolio-list").delegate("li a:not(.noAjax)", "click", function() 
0

Essayez de changer la première partie à ceci:

$("#filter a").not($(".noAjax")).del... 

L'autre manière va sélectionner tous les éléments dans #filter que ne sont pas a.noAjax (y compris les étiquettes non-ancre).