Почему jQuery выбирает только один элемент при цепочке .attr() в селекторе?

#javascript #html #jquery #dom #web-crawler

#javascript #HTML #jquery ( jquery ) #dom #веб-сканер

Вопрос:

У меня есть простой список ссылок:

 <ul>
  <li><a href="1">link 1</a></li>
  <li><a href="2">link 2</a></li>
  <li><a href="3">link 3</a></li>
  <li><a href="4">link 4</a></li>
  <li><a href="5">link 5</a></li>
  <li><a href="6">link 6</a></li>
  <li><a href="7">link 7</a></li>
  <li><a href="8">link 8</a></li>
  <li><a href="9">link 9</a></li>
  <li><a href="10">link 10</a></li>
</ul>
 

Как мне выбрать эти ссылки с помощью jQuery?

$('a') — это возвращает все ссылки

Как мне получить все содержимое этих ссылок («ссылка 1», «ссылка 2», «ссылка 3» …)?

$('a').text()

Как мне получить все ссылки из ссылок (1, 2, 3 …)?

$('a').attr('href')

НЕВЕРНО ^ ОН ВЫБИРАЕТ ТОЛЬКО ПЕРВУЮ ССЫЛКУ и возвращает 1 вместо [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] .

Я знаю, что мог map бы, делаю each и т.д., Но я пишу поисковый робот, который часто использует это, и задаюсь вопросом, почему это происходит и могу ли я получить все hrefs без каких-либо циклов здесь, просто используя селекторы jQuery (предпочтительно jQuery core)?

Демо-версия: https://jsfiddle.net/z5j1ty08 /

Комментарии:

1. Так что просто для того, чтобы прояснить ситуацию… вы хотите перебирать ссылки (чтобы получить их содержимое) без каких-либо циклов?

2. Требуется цикл, если вы не хотите жестко кодировать каждый индекс, что является МОКРЫМ и глупым. Не делайте этого. Не бойтесь циклов. Компьютеры быстры .

3. Вам понадобятся циклы. Другого пути нет. Это не повлияет на производительность вашей программы.

4. Я знаю, это звучит глупо, но каким-то образом я использую ВСЕ ссылки $('a').text() , и цикл не нужен. В чем дело?

5. @Wordpressor Описание от .text() jQuery: «Получить объединенное текстовое содержимое каждого элемента в наборе сопоставленных элементов, включая их потомков, или задать текстовое содержимое сопоставленных элементов». Вы можете использовать .text() , чтобы получить все элементы, но если вы хотите действовать над ними по отдельности, вам нужно перебирать каждый элемент.

Ответ №1:

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

Зацикливание не окажет какого-либо существенного влияния на производительность вашего веб-сканера.

При этом, как говорится, вы просто смотрите на:

 $('a').each(function() {
  console.log($(this).text());
});
 

Демо-версия: https://jsfiddle.net/q1er5946 /