找到具有特定字符串的ID

时间:2012-05-31 09:47:30

标签: javascript jquery

我正在尝试学习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);
}

5 个答案:

答案 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;
});

http://jsfiddle.net/alnitak/Zu3dJ/

的工作演示

答案 4 :(得分:0)

纯Javascript中的替代解决方案,适用于现代浏览器(包括IE8+

var elems = document.querySelectorAll("a[id^='a_l_']");

elems<a>元素的集合,其ida_l_开头。确实querySelectorAll较慢但可读性大大增加