Извлечение href из списка узлов

#javascript #phantomjs

#javascript #phantomjs

Вопрос:

 var downloadLinks = document.querySelectorAll('[href*="/Download"]');
  

дает мне список узлов со всеми элементами, но как мне извлечь только href значение из всех узлов в виде единого массива?

Я пытался return Array.from(downloadLinks) , но похоже, что PhantomJS не поддерживает ES6, поэтому я получаю TypeError: undefined is not a function

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

1. Чего ты не знаешь? Как выполнить итерацию коллекции? Как прочитать свойство? Как создать новый массив? Это кажется довольно простой задачей для тех, у кого есть сотни сообщений JavaScript / jQuery.

Ответ №1:

 var downloadLinks = document.querySelectorAll('[href*="/Download"]');
var arrHREF = []; // create an Array to save hrefs
var i = 0;
for(; i<downloadLinks.length; i  ) {
  arrHREF.push(downloadLinks[i].href); // push hrefs in array
}
  

или вы можете записать его в одной строке как (используя свойство цикла for для объявления переменных в скобках выполнения)

 for (var downloadLinks = document.querySelectorAll('[href*="/Download"]'), arrHREF = [], i = 0; i < downloadLinks.length; i  ) arrHREF.push(downloadLinks[i].href);
  

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

1. Эмм, я должен был быть более ясным. Я бы сделал это так же, но, поскольку я делаю это снова и снова, я ищу эффективный способ и в идеале однострочный вместо for?

2. @squint вау, слышал об этом впервые, проверю это прямо сейчас! Спасибо.

Ответ №2:

 Array.prototype.map.call(document.querySelectorAll("[href*=" / Download "]"), function (e) {
  return e.getAttribute('href');
});
  

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

1. 1. Атрибут селектора вашего запроса там немного странный, и 2. почему бы и нет [].map.call(document.querySelectorAll('[href*="/Download"]'), function(e) { return e.href; }); ?