在jQuery中将所有href作为数组获取

时间:2009-01-23 01:58:35

标签: jquery html

我的代码如下所示:

<ul id="ulList">
  <li class="listClass" id="id1"><a href="http://link1">Link 1</a></li>
  <li class="listClass" id="id2"><a href="http://link2">Link 2</a></li>
  <li class="listClass" id="id3"><a href="http://link3">Link 3</a></li>
</ul>

现在我想得到以下内容:

所有链接都是数组

li的所有id作为数组

有人能帮助我吗?

8 个答案:

答案 0 :(得分:19)

var ids = new Array();
var hrefs = new Array();
$('#ulList li').each(function(){
  ids.push($(this).attr('id'));
  hrefs.push($(this).find('a').attr('href'));
})

答案 1 :(得分:13)

我知道这是旧的,但是因为我喜欢jQuery允许你写的oneliner,我想我会添加它:

var allLinks = $('#ulList a').map(function(i,el) { return $(el).attr('href'); }).get();
var allIds = $('#ulList li').map(function(i,el) { return $(el).attr('id'); }).get();

答案 2 :(得分:6)

偶然发现了这个问题并提出了一个更可重复的答案:

$.fn.collect = function(fn) {
    var values = [];

    if (typeof fn == 'string') {
        var prop = fn;
        fn = function() { return this.attr(prop); };
    }

    $(this).each(function() {
        var val = fn.call($(this));
        values.push(val);
    });
    return values;
};

var ids = $('#ulList li').collect('id');
var links = $('#ulList a').collect('href');

您也可以将函数传递给collect,如下所示:

var widths = $('#ulList li').collect(function() {
    return this.width();
});

答案 3 :(得分:4)

这应该有用。

var ids = [],
    hrefs = []
;   
$('#ulList')
    .find('a[href]')  // only target <a>s which have a href attribute
        .each(function() {
            hrefs.push(this.href);
        })
    .end()
    .find('li[id]')   // only target <li>s which have an id attribute
        .each(function() {
            ids.push(this.id);
        })
;

// ids = ['id1', 'id2', 'id3']
// hrefs = ['http://link1', 'http://link2', 'http://link3']

答案 4 :(得分:1)

var links = [], ids = [];
var $ul = $('#ulList');
var $lis = $ul.children('li');
var $as = $lis.children('a');

for(var count = $lis.length-1, i = count; i >= 0; i--){
    ids.push($lis[i].id);
    links.push($as[i].href);
}

答案 5 :(得分:1)

如果你喜欢一个衬里而又讨厌必须实例化一个空数组。

[]
  .slice
  .call($('#ulList a'))
  .map(el => el.getAttribute('href'))

答案 6 :(得分:0)

与Grimace提供的代码相同,但在ES6中

const allLinks = $('#ulList a').map((i,el) => $(el).attr('href')).get();
const allIds = $('#ulList li').map((i,el) => $(el).attr('id')).get();

答案 7 :(得分:0)

我来是要寻找一种班轮。这是我想出的:

var hs=[]; $('a').each(function(i,a){hs.push(a.href);}); hs;