2010-09-03 9 views

Répondre

6

Essayez de mettre tout dans le sélecteur principal:

Exemple:http://jsfiddle.net/8Tkex/

jQuery("a:not(div#mnuMain a)").live("click", function(event){ 
      event.preventDefault(); 
      alert("yes I got u");     
    }); 

EDIT:

La raison en utilisant .not() ne fonctionnait pas est que lorsque vous utilisez live() m de jQuery ethod, vous ne placez pas le gestionnaire de clic sur l'élément. Au lieu de cela, vous le placez à la racine du document.

Cela fonctionne parce que tous les clics (et autres) événements sur la page "remontent" de l'élément qui a réellement reçu l'événement, jusqu'à la racine, tirant ainsi le gestionnaire que vous avez placé à la racine en utilisant .live() . Parce que cela se produit pour chaque clic sur la page, jQuery doit savoir lequel élément a reçu le clic afin qu'il puisse déterminer le gestionnaire (le cas échéant) à déclencher. Il le fait en utilisant le selector que vous avez utilisé lorsque vous avez appelé .live().

Donc, si vous avez:

jQuery("a").live("click", func... 

... jQuery compare le sélecteur "a" à chaque événement click qui est reçu.

Alors quand vous faites:

jQuery("a:not(div#mnuMain a)").live("click", func... 

... alors jQuery utilise "a:not(div#mnuMain a)" pour la comparaison.

Mais si vous

jQuery("a").not("div#mnuMain a").live("click", func... 

... le sélecteur finit par ressembler à "a.not(div#mnuMain a)", qui ne correspondre à quelque chose, car il n'y a pas .notclasse sur l'élément <a>.

Je pense que certaines méthodes peuvent fonctionner avec live(), mais .not() n'en fait pas partie.

Si vous êtes curieux de savoir à quoi ressemble le sélecteur pour votre objet jQuery, enregistrez votre objet dans une variable, connectez-le à la console et regardez à l'intérieur. Vous verrez la propriété selector utilisée par jQuery.

var $elem = jQuery("a").not("div#mnuMain a"); 

console.log($elem); 

... devrait afficher à la console quelque chose comme:

Object 
    context: HTMLDocument 
    length: 0 
    prevObject: Object 
    selector: "a.not(div#mnuMain a)" // The selector that jQuery stored 
    __proto__: Object 

Ceci est la sortie que je reçois de la console de Safari.

+0

Bonjour .... Pouvez-vous s'il vous plaît me dire pourquoi il ne fonctionnait pas? –

+0

@cloudlight - Bien sûr. Je l'afficherai dans ma réponse dans quelques minutes. : o) – user113716

+0

merci beaucoup patrik dw pour une si belle explication. –

0
jQuery("a:not(div#mnuMain a)").live("click", function(event){ 
      event.preventDefault(); 
      alert("yes I got u");     
    }); 

essayer

Questions connexes