Селекторы JQuery - PullRequest
       21

Селекторы JQuery

0 голосов
/ 18 апреля 2009

У меня есть простой селектор jQuery, который выбирает все ссылки без класса noValidate. Это прекрасно работает, если у меня есть только 1 класс для элемента, однако, если я добавлю второй класс, он больше не найдет класс. Как я могу легко проверить, что класс содержит noValidate, а не равен ему.

Текущий селектор

$("a[class!=noValidate]").click(function() {
    //Magic Happens
});

Работает на:

<a href="#" class="noValidate">

Сбой

<a href="#" class="noValidate className2">

Ответы [ 5 ]

6 голосов
/ 18 апреля 2009

По какой причине вы отмечаете те ссылки, которые не должны проверяться, в отличие от тех, которые должны? Второй способ будет намного проще, но если вам нужно придерживаться этого, то вы можете сделать что-то вроде этого:

$('a:not(.noValidate)').click(...);

Используется селектор not и выбираются только те ссылки, которые не имеют класса noValidate. Внутренне jQuery должен получить все ссылки на странице, чтобы увидеть, есть ли у него класс или нет, что не очень эффективно. В идеале, вы бы просто дали класс ссылкам, которые должны проверяться, тогда вы можете сделать:

$('a.validate').click(...);

Намного приятнее, нет? Гораздо быстрее тоже.

2 голосов
/ 18 апреля 2009

Вы можете использовать селектор not:

$("a:not(.noValidate)").click(function() {
    //Magic Happens
});
2 голосов
/ 18 апреля 2009

Попробуйте:

$("a:not(a[class*=noValidate])").click(function() { });
0 голосов
/ 18 апреля 2009

Измените ваш селектор, чтобы сделать это:

"a:not([class^='noValidate'])"

^= будет соответствовать любому элементу, который имеет атрибут класса, который начинается с "noValidate", а not(), обертывающий его, отрицает матч.

Если возможно, что класс "noValidate" может находиться в другой позиции внутри строки, попробуйте это:

"a:not([class*='noValidate'])"

, который будет соответствовать в любом месте строки. Этот последний подход более опасен, так как у вас больше шансов непреднамеренно сопоставить что-то еще.

0 голосов
/ 18 апреля 2009

Можете ли вы сделать наоборот?

$("a:not[.noValidate]").click(...);
// or

$("a").click(function() {
    //Magic Happens
});
var noValidateEvents = $("a.noValidate").data("events");
$("a.noValidate").unbind('click', noValidateEvents.click[0]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...