Как отрицать контекст - PullRequest
       5

Как отрицать контекст

6 голосов
/ 11 февраля 2011

Я хочу выбирать элементы, но нет, если один из их предков соответствует определенному селектору.

Например, допустим, я хочу сопоставить все <a> узлы, которые не являются потомками таблицы.

Я пробовал что-то вроде этого:

$("a", ":not(table *)");

но это сбивает мой браузер.

На этом также висит мой браузер:

jQuery("a", ":not(table td)");

Запрашиваемая страница довольно большая, с множеством очень больших таблиц. Итак, мне нужно что-то, что хорошо работает. Есть идеи?

Ответы [ 3 ]

6 голосов
/ 11 февраля 2011

Другие ответы слишком усложняют вещи.

$('a').not('table a');

-или-

$('a:not(table a)');

Второй параметр в функции jQuery - это контекст, в котором выполняется поиск элемента, но при выборе :not(table) будет выбран каждый элемент , который не является таблицей, включая потомков таблиц. Обычно вы хотите использовать параметр context, когда у вас есть конкретный документ или элемент, в котором вы хотите выполнить поиск.

0 голосов
/ 11 февраля 2011

Использование:

$("a").not("td a")

Проверить эту скрипку .

0 голосов
/ 11 февраля 2011
$('a').not(function() {
   return $(this).closest('table').length > 0;
});

или, скорее всего, будет быстрее, если они всегда являются прямыми потомками тега <td>

$('a').not(function() {
   return $(this).parent('td').length > 0;
});
...