English 中文(简体)
在jQuery中将所有href作为数组获取
原标题:
  • 时间:2009-01-23 01:58:34
  •  标签:

我的代碼看起來像這樣:

<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作为一个数组

有人可以帮助我吗?

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

我知道这已经很旧了,但由于我喜欢jQuery允许你编写的单行程序,我想我会添加它:

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();

偶然遇到这个问题,想出了一个更可重复使用的答案:

$.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();
});

这应该能行。

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 ]
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);
}

如果你喜欢一句话而且不喜欢创建一个空数组。

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

与Grimace提供的代码相同,但采用ES6编写。

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

我来找一个简单的话语。这是我想到的:

var hs=[]; $( a ).each(function(i,a){hs.push(a.href);}); hs; 的中文翻译: var hs=[]; $( a ).each(function(i,a){hs.push(a.href);}); hs;





相关问题
热门标签