Как в jQuery я могу выбрать только ссылки внутри элемента div, а не дочерние элементы div, содержащиеся в этом div?
<div>
<a>Link 1</a>
<a>Link 2</a>
<div>
<a>Not these 1</a>
<a>Not these 2</a>
</div>
</div>

используйте прямой дочерний селектор>
например
$('div>a')
Обновлено: успокоить г-на Роборга
Если у вас есть якоря внутри вложенных элементов внутри первого div, то будет работать следующее. При этом используется фильтр, чтобы гарантировать, что родительский div действительно является тем div, на который вы нацеливаетесь, а не вложенным div.
var firstDivAnchors = $('div a').filter( function(){
return $(this).closest('div').is('#yourDiv');
});
он сказал, что divs-ссылки, а не div-ссылки.
Если есть конкретный div, на который вы хотите настроить таргетинг, вы можете попробовать:
$("div#mydiv a :not(div a)");
Обновлено: Было бы здорово, если бы вы разместили еще немного контекста (HTML) :)
который всегда будет давать 0 результатов
Он работает на моем сайте (www.viajeros.com). Попробуйте в firebug: $ ("div # footer a: not (div a)");
Я думаю, это работает благодаря весу селекторов CSS: «div # something» весит больше, чем просто «div»
@Danita - вам нужно проверить свою разметку на w3c, много ошибок (240+), что будет означать странные результаты селектора
ваш #footer на самом деле имеет 0 тегов привязки, не будучи в дочерних div, ваш вышеупомянутый селектор сообщает 2
@redsquare Особое внимание было уделено соблюдению рекомендаций w3c. Также мы проверяем наши страницы с помощью HTML Tidy для Firefox. У нас есть 20 предупреждений (не 240+, не ошибки) на домашней странице, большинство из которых связано с кодом, который мы обязаны сохранять дословно, и для специальной разметки для WAI-ARIA.
@redsquare Что касается конкретного вопроса этой ветки, то вы правы. Я ошибался.
@Danita, иди сюда tinyurl.com/98g2u7 на вашем сайте 247 ошибок, 29 предупреждений ....
Я не очень хорошо помню, но разве children () не работает?
$ (thisDiv) .children ('а')
В docs.jquery.com он гласит: дети() Получите набор элементов, содержащий всех уникальных непосредственных дочерних элементов каждого из согласованного набора элементов.
Да дети или> то же самое - Прямые дети
правда, но насколько я знаю, разница в том, что при использовании дочерних элементов не используется регулярное выражение для деконструкции селектора, но оба подхода являются хорошими.
Думаю, Данита была на правильном пути, но и ее сэмпл мне не подошел. Однако использование .not () действительно сработало:
Дано:
<div id = "testdiv">
<span><a>span a</a></span> <a>a</a>
<div>
<a>div a</a><span><a>div span a</a></span>
</div>
</div>
найти только теги, не вложенные во вложенные блоки div.
var test = $('#testdiv').find('a').not('#testdiv div a');
$(test).each(function(){
trace( $(this).html());
});
Он не только проигнорирует теги внутри вложенного div, но и НЕ будет игнорировать теги a, вложенные в промежутки.
У меня была такая же потребность, и я огляделся. Вдохновленный несколькими ответами здесь, я написал это
$('div a').not('div div a')
Я проверил это, и он работает! :-)
Но он не будет отфильтровывать ссылки, вложенные еще ниже. Ответ redsquare кажется лучше.
Не совсем ... это не получит <div> <span> <a> ... который, как подсказывает вопрос, должен