Как выбирать ссылки, но не дочерние ссылки в jQuery?

Как в 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>
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
2
0
18 082
5

Ответы 5

используйте прямой дочерний селектор>

например

$('div>a')

Обновлено: успокоить г-на Роборга

Если у вас есть якоря внутри вложенных элементов внутри первого div, то будет работать следующее. При этом используется фильтр, чтобы гарантировать, что родительский div действительно является тем div, на который вы нацеливаетесь, а не вложенным div.

Демо

  var firstDivAnchors = $('div a').filter( function(){
        return $(this).closest('div').is('#yourDiv');
  });

Не совсем ... это не получит <div> <span> <a> ... который, как подсказывает вопрос, должен

Greg 13.01.2009 14:30

он сказал, что divs-ссылки, а не div-ссылки.

redsquare 13.01.2009 14:40

Если есть конкретный div, на который вы хотите настроить таргетинг, вы можете попробовать:

$("div#mydiv a :not(div a)");

Обновлено: Было бы здорово, если бы вы разместили еще немного контекста (HTML) :)

который всегда будет давать 0 результатов

redsquare 13.01.2009 14:57

Он работает на моем сайте (www.viajeros.com). Попробуйте в firebug: $ ("div # footer a: not (div a)");

Danita 13.01.2009 14:58

Я думаю, это работает благодаря весу селекторов CSS: «div # something» весит больше, чем просто «div»

Danita 13.01.2009 14:59

@Danita - вам нужно проверить свою разметку на w3c, много ошибок (240+), что будет означать странные результаты селектора

redsquare 13.01.2009 15:03

ваш #footer на самом деле имеет 0 тегов привязки, не будучи в дочерних div, ваш вышеупомянутый селектор сообщает 2

redsquare 13.01.2009 15:09

@redsquare Особое внимание было уделено соблюдению рекомендаций w3c. Также мы проверяем наши страницы с помощью HTML Tidy для Firefox. У нас есть 20 предупреждений (не 240+, не ошибки) на домашней странице, большинство из которых связано с кодом, который мы обязаны сохранять дословно, и для специальной разметки для WAI-ARIA.

Danita 14.01.2009 14:47

@redsquare Что касается конкретного вопроса этой ветки, то вы правы. Я ошибался.

Danita 14.01.2009 14:50

@Danita, иди сюда tinyurl.com/98g2u7 на вашем сайте 247 ошибок, 29 предупреждений ....

redsquare 15.01.2009 16:23

Я не очень хорошо помню, но разве children () не работает?

$ (thisDiv) .children ('а')

В docs.jquery.com он гласит: дети() Получите набор элементов, содержащий всех уникальных непосредственных дочерних элементов каждого из согласованного набора элементов.

Да дети или> то же самое - Прямые дети

redsquare 13.01.2009 15:14

правда, но насколько я знаю, разница в том, что при использовании дочерних элементов не используется регулярное выражение для деконструкции селектора, но оба подхода являются хорошими.

Ricardo Vega 13.01.2009 21:30

Думаю, Данита была на правильном пути, но и ее сэмпл мне не подошел. Однако использование .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 кажется лучше.

Barmar 28.09.2012 21:57

Другие вопросы по теме