Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Javascript中的元素列表获取href列表_Javascript_Foreach - Fatal编程技术网

从Javascript中的元素列表获取href列表

从Javascript中的元素列表获取href列表,javascript,foreach,Javascript,Foreach,我知道我可以用一个简单的for循环来实现这一点,但我正试图更好地理解如何使用forEach 我试图做的是,从querySelectorAll()中获得一个“a”元素列表,以获得具有href属性的数组。怎么了 var links = document.querySelectorAll("a"); function get_hrefs(links){ var links_array = links.forEach(function(elem){ return elem.getAttribut

我知道我可以用一个简单的for循环来实现这一点,但我正试图更好地理解如何使用
forEach

我试图做的是,从querySelectorAll()中获得一个“a”元素列表,以获得具有href属性的数组。怎么了

var links = document.querySelectorAll("a");
function get_hrefs(links){
    var links_array = links.forEach(function(elem){ return elem.getAttribute("href"); });
    return links_array;
}
get_hrefs(links);
forEach
将元素推入空数组。forEach只是迭代所有元素。你用它做什么是你的决定

其他用户则指向使用
map
。这个函数很适合这个问题。然而,问题是要更好地理解forEach的
forEach


Cerburs指出,
querySelectorAll
返回一个
nodelist
。一开始我忽略了这一点。而不是数组。现在,
nodelist
已排列。因此,您仍然可以使用
Array.prototype.forEach.call()
将其视为一个

由于
nodelist
没有函数
forEach
,我们需要从数组对象调用它。然后我们使用
call
的第一个参数传递对
链接的引用

forEach
将元素推入空数组。forEach只是迭代所有元素。你用它做什么是你的决定

其他用户则指向使用
map
。这个函数很适合这个问题。然而,问题是要更好地理解forEach的
forEach


Cerburs指出,
querySelectorAll
返回一个
nodelist
。一开始我忽略了这一点。而不是数组。现在,
nodelist
已排列。因此,您仍然可以使用
Array.prototype.forEach.call()
将其视为一个


由于
nodelist
没有函数
forEach
,我们需要从数组对象调用它。然后我们使用
call
的第一个参数传递对
links
的引用,使用
slice
获得一个数组,如下所示:

var links = Array.prototype.slice.call(document.querySelectorAll("a"));
var links_array = links.map(function(elem){ return elem.getAttribute("href"); });
var links = document.querySelectorAll("a");
var links_array = [];
[].forEach.call(
  links, 
  function(elem){
    links_array.push(elem.getAttribute("href"));
  }
);

至于最新问题:

var links = document.querySelectorAll("a");

function get_hrefs(links){
    links = Array.prototype.slice.call(links);

    return links.map(function(elem){ return elem.getAttribute("href"); });;
}

get_hrefs(links);

使用
slice
获取数组,如下所示:

var links = Array.prototype.slice.call(document.querySelectorAll("a"));
var links_array = links.map(function(elem){ return elem.getAttribute("href"); });
var links = document.querySelectorAll("a");
var links_array = [];
[].forEach.call(
  links, 
  function(elem){
    links_array.push(elem.getAttribute("href"));
  }
);

至于最新问题:

var links = document.querySelectorAll("a");

function get_hrefs(links){
    links = Array.prototype.slice.call(links);

    return links.map(function(elem){ return elem.getAttribute("href"); });;
}

get_hrefs(links);

您正在查找的是
map
而不是
forEach
,您需要以不同的方式调用它,因为
querySelectorAll
返回的是
节点列表,而不是arary:

var links = document.querySelectorAll("a");
var links_array = Array.prototype.map.call(links, function(e){
    return e.getAttribute("href");
});
如果你真的想要属性值。如果需要解析的
href
,则:

var links = document.querySelectorAll("a");
var links_array = Array.prototype.map.call(links, function(e){
    return e.href;
});


更新后的问题,函数将接收
链接,但不一定知道它是什么:上面的代码既适用于真实数组,也适用于
querySelectorAll
返回的
NodeList
之类的数组。因此无需进行任何更改即可处理它。

您正在查找的是
map
而不是
forEach
,您需要对其进行不同的调用,因为
querySelectorAll
返回的是
节点列表,而不是arary:

var links = document.querySelectorAll("a");
var links_array = Array.prototype.map.call(links, function(e){
    return e.getAttribute("href");
});
如果你真的想要属性值。如果需要解析的
href
,则:

var links = document.querySelectorAll("a");
var links_array = Array.prototype.map.call(links, function(e){
    return e.href;
});


更新后的问题,函数将接收
链接,但不一定知道它是什么:上面的代码既适用于真实数组,也适用于
querySelectorAll
返回的
NodeList
之类的数组。因此不需要进行任何更改来处理它。

如果要使用
foreach
,因为
querySelectorAll
不返回数组,所以可以执行以下操作:

var links = Array.prototype.slice.call(document.querySelectorAll("a"));
var links_array = links.map(function(elem){ return elem.getAttribute("href"); });
var links = document.querySelectorAll("a");
var links_array = [];
[].forEach.call(
  links, 
  function(elem){
    links_array.push(elem.getAttribute("href"));
  }
);

如果要使用
foreach
,因为
querySelectorAll
不返回数组,所以可以执行以下操作:

var links = Array.prototype.slice.call(document.querySelectorAll("a"));
var links_array = links.map(function(elem){ return elem.getAttribute("href"); });
var links = document.querySelectorAll("a");
var links_array = [];
[].forEach.call(
  links, 
  function(elem){
    links_array.push(elem.getAttribute("href"));
  }
);

document.querySelectorAll(“a”)返回节点列表而不是数组web控制台中的错误应该会让您了解第一个问题是什么。关于
forEach
的任何文档都应该让您了解第二个问题是什么。document.queryselectoral(“a”)返回节点列表而不是数组web控制台中的错误应该让您了解第一个问题是什么。关于
forEach
的任何文档都应该能让您了解第二个问题是什么。
querySelectorAll
不返回数组。
querySelectorAll
不返回数组。我喜欢这个答案,但是,如果链接是在函数之外给出的呢?真遗憾,其他4>6k用户没有测试他们的代码+1作为唯一一个提供有效答案的人。我更新了答案上的示例,以便更具体地说明我必须使用的日期,你能检查一下吗?@Vandervals:没什么区别。还有一件事。。。在你看来,对地图的支持已经足够好了??我喜欢这个答案,但是,如果链接是在功能之外提供的呢?真遗憾,其他>6k的用户没有测试他们的代码+1作为唯一一个提供有效答案的人。我更新了答案上的示例,以便更具体地说明我必须使用的日期,你能检查一下吗?@Vandervals:没什么区别。还有一件事。。。在您看来,对map的支持已经足够好了??