如何使用jQuery收集表单ID

时间:2011-11-30 00:14:56

标签: javascript jquery

jQuery选择器$(".thumb_up")返回如下形式的集合:

[<form id="like_post_78" ...</form> <form id="like_post_79"> ... </form>]

最终我想生成一个由表单ID的数字结尾部分组成的字符串。

"78,79"

最有效的方法是什么?

4 个答案:

答案 0 :(得分:4)

最简单的方法可能是:

var form_ids = $('form').map(function(){return this.id.replace(/[a-z_]/gi,'');}).get().join(', ');
console.log(form_ids); // or alert() or whatever...

JS Fiddle demo

我刚刚更新了上面的正则表达式部分,从/[a-z_]/gi/\D/g(基本上贪婪地(g)替换了任何非数字字符(\D )'没有'),给出以下代码:

var form_ids = $('form').map(function(){return this.id.replace(/\D/g,'');}).get().join(', ');
console.log(form_ids);

JS Fiddle demo


编辑在考虑了@James Hill的准确观察(下面)最简单!= 效率最高之后:

  

请记住,OP要求最有效的方法,而不是最简单的方法。

因此,使用纯JavaScript(据我所知,这应该是跨浏览器可用的):

var form_ids = [];
var forms = document.getElementsByTagName('form');
for (var i=0; i<forms.length; i++){
    form_ids.push(forms[i].id.replace(/\D/g,''));
}
console.log(form_ids.join(', '));

JS Fiddle demo

JS Perf比较两者,显示JavaScript 趋向成为更快(这意味着它更高效,可能是因为它正在运行本机JavaScript / ECMAscript,而不是然后调用本机JavaScript / ECMAscript ...)的抽象代码。)。

参考文献:

答案 1 :(得分:1)

选项1

将jQuery的each()函数与类选择器结合使用:

var aryIDs = [];

$(".thumb_up").each(function(){
    //Add ID to the array while stripping off all non-numeric data using RegEx
    aryIDs.push(this.id.replace(/\D/g, ""));
});

//Get the ids
var csvIDs = aryIDs.toString();

选项2

使用jQuery抓取元素,然后使用普通的旧for循环:

var aryIDs = [];
var divs = $(".thumb_up");

for(var i= 0; i < divs.length; i++)
{
    aryIDs.push(divs[i].id.replace(/\D/g, ""));
}

var csvIDs = aryIDs.toString();

这是后一个例子的a working jsFiddle

<强>性能

至于性能,for循环每次都应该更快。查看我创建的simple jsPerf,以比较 .each() .map()效果循环标准

答案 2 :(得分:0)

var str = "";
$(".thumb_up").each(function(){
    var id = $(this).attr('id').split('like_post_');
    str += id[1] + ',';
});

最后你会得到一个额外的“,”但是你可以通过这个基本的例子得到你想要的东西。

答案 3 :(得分:0)

只是为了记录,有一个 document.forms 集合,它是文档中的每个表单,因此获取所有表单ID的数组就像这样简单:

var ids = [];
var forms = document.forms;

for (var i = forms.length; i;) {
  ids[--i] = forms[i].id;
}

如果您对“效率”的定义意味着最快,那么上面应该对任何jQuery答案(it does)进行响铃。如果您只想要具有特定类的表单,那么通过在循环中测试表单的className属性来过滤它们并不困难。