#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; });
?