我正在尝试学习JavaScript,我想将我正在研究的内容改为纯JavaScript解决方案。如何将其更改为JavaScript:
var hrefs = $("a[id^=a_l_]").map(function() {
return this.href;
}).get();
它基本上找到包含“a_l_”的所有id并将其放入数组中。
这是我试过的
var matches = [];
var elems = document.getElementsByTagName("a");
for (var i=0; i<elems.length; i++) {
if (elems[i].id.indexOf("a_l_") == 0)
matches.push(elems[i]);
console.log(matches);
}
答案 0 :(得分:2)
始终使用括号{}
作为条件!不久之后,你会犯错误!
for (var i=0; i<elems.length; i++) {
if (elems[i].id.indexOf("a_l_") == 0) { // <-- {
matches.push(elems[i]);
console.log(matches);
} // <-- }
}
答案 1 :(得分:0)
你可以先做一个过滤器,然后做一张地图。
var hrefs = Array.prototype.filter.call(document.getElementsByTagName("a"), function(node) {
return node.id.indexOf("a_l_") === 0;
}).map(function(node) {
return node.href;
});
答案 2 :(得分:0)
您正在尝试查找id等于“a_l_”的所有元素,并将它们添加到数组中。我建议你的html元素不应该有相同的id。你应该把它们移到课堂上。无论如何,试试这个:
var matches = [];
var elems = document.getElementsByTagName("a");
for(var i=0; i<elems.length; i++) {
if(elems[i].id.indexOf("a_l_") != -1) {
matches.push(elems[i]);
console.log(matches);
}
}
答案 3 :(得分:0)
假设ES5数组方法(如果它们不存在则使用填充/填充)
var hrefs = [].filter.call(document.getElementsByTagName('a'), function(el) {
return el.id.indexOf('a_l_') === 0;
}).map(function(el) {
return el.href;
});
的工作演示
答案 4 :(得分:0)
纯Javascript中的替代解决方案,适用于现代浏览器(包括IE8+
)
var elems = document.querySelectorAll("a[id^='a_l_']");
elems
是<a>
元素的集合,其id
以a_l_
开头。确实querySelectorAll
较慢但可读性大大增加