Попробуйте поместить все это в главный селектор:
Пример: http://jsfiddle.net/8Tkex/
jQuery("a:not(div#mnuMain a)").live("click", function(event){
event.preventDefault();
alert("yes I got u");
});
РЕДАКТИРОВАТЬ:
Причина использования .not()
не сработала в том, что когда вы используете метод jQuery live()
, вы фактически не размещаете обработчик щелчков на элементе.Вместо этого вы помещаете его в корень документа.
Это работает, потому что все щелчки (и другие) события на странице "всплывают" от элемента, который фактически получил событие, вплоть доroot, таким образом запуская обработчик, который вы поместили в корень, используя .live()
.
Поскольку это происходит для каждого клика на странице, jQuery должен знать , какой элемент получил щелчок, такон может определить, какой (если есть) обработчик запустить.Он делает это, используя selector
, который вы использовали при вызове .live()
.
Так что если вы сделали:
jQuery("a").live("click", func...
... jQuery сравнивает селектор "a"
с каждым click
событие, которое получено.
Поэтому, когда вы делаете:
jQuery("a:not(div#mnuMain a)").live("click", func...
... тогда jQuery использует "a:not(div#mnuMain a)"
для сравнения.
Но если вы делаете
jQuery("a").not("div#mnuMain a").live("click", func...
... селектор выглядит как "a.not(div#mnuMain a)"
, что не соответствует никому, поскольку в элементе <a>
нет .not
класса .
Я думаю, что некоторые методы могут работать с live()
, но .not()
не является одним из них.
Если вам когда-нибудь интересно узнать, как выглядит селектор для вашего объекта jQuery,сохраните ваш объект в переменную, войдите в консоль и загляните внутрь.Вы увидите свойство selector
, которое использует jQuery.
var $elem = jQuery("a").not("div#mnuMain a");
console.log( $elem );
... должно выводить на консоль что-то вроде:
Object
context: HTMLDocument
length: 0
prevObject: Object
selector: "a.not(div#mnuMain a)" // The selector that jQuery stored
__proto__: Object
Это вывод, полученный от Safariконсоль.