我的代码如下所示:
<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作为数组
有人能帮助我吗?
答案 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;