从Javascript中的元素列表获取href列表
我知道我可以用一个简单的for循环来实现这一点,但我正试图更好地理解如何使用从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
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的支持已经足够好了??