获取锚ID并转换为JavaScript数组

时间:2010-09-07 10:49:30

标签: jquery load

如何使用jQuery获取特定div中锚点的所有id并将它们转换为数组以传递load / get方法?

HTML将采用以下格式:

<div id="a div id">
   <div style="some styling">
      <span><a href="" id="the_id_1"/></span>
      <span><a href="" id="the_id_2"/></span>
      <span><a href="" id="the_id_3"/></span>
   </div>
</div>

所以理论上我是在将锚点的id传递给一个加载方法之后,所以我可以根据所选的id刷新div的内容。

编辑#1

id与我上面提到的略有不同。

这是我用来从锚点获取id号的函数:

function getSelectedTierPanels(tierId) {
    var container = $('#tier'+tierId+' a').map(function() { 
        return this.id.match(/\d+$/);
    }).get();
    alert(container);
    return container;
}

3 个答案:

答案 0 :(得分:3)

TJ's answer类似,但使用map()函数创建一个包含所有ID的新jQuery对象,然后get()从对象获取正常数组:

var anchors = $('#a_div_id a').map(function () { return this.id; }).get();

<小时/> 要以the_id_1the_id_2格式获取id中的数字,您可以使用我最喜欢的技术之一 - 分割和弹出:

var anchors = $('#a_div_id a').map(function () { 
    return this.id.split("_").pop();
}).get();

此技术将字符串拆分为每个_的数组。 pop()方法删除并返回数组的最后一项,这只是这种情况下的数字。如果您想要数组的不同部分,可以直接引用该项的索引。

<小时/> 如果您的id略有不同,那么正则表达式可能比分割更好。您当前拥有的是return this.id.match(/\d+$/);,除了 match()返回一个数组,因此您需要访问该数组的第一个元素以检索完整匹配时,这很好:

return this.id.match(/\d+$/)[0];

请注意,如果没有成功匹配,这会抛出错误,因此您最好将匹配存储到变量中:

var match = this.id.match(/\d+$/);
return match ? match[0] : null;

答案 1 :(得分:3)

function get_all_idz() {
    var array_idz = new Array();
    var total = $(".row_id").length;
    for(a=0; a<=total-1; a++)
    {
        var abc = $(".row_id").eq(a).attr('id');
        array_idz[a] = abc;
    }
    alert(array_idz);
}
/*IT WILL STORE IN ARRAY LIKE (10,11,12,13,14,15)*/

答案 2 :(得分:2)

这样的事情应该有效:

var anchors = [];
$('#a_div_id a').each(function() {
    // `this` is the actual `a` element
    if (a.id) {
        anchors.push(a.id);
    }
});

选择器“#a_div_id a”(注意我已经更改了ID以使其工作; ID中没有允许的空格用于选择器)查找作为元素后代的所有a元素ID为“a_div_id”。 jQuery的each遍历它们,每次调用迭代器函数设置this到实际的a元素(不是它的jQuery对象)。在a元素实例中,您可以查询id属性,该属性反映了id属性。