Javascript 如何使用jQuery收集表单ID

Javascript 如何使用jQuery收集表单ID,javascript,jquery,Javascript,Jquery,jQuery选择器$(“.thumb\u up”)返回如下表单的集合: [<form id="like_post_78" ...</form> <form id="like_post_79"> ... </form>] 最有效的方法是什么 var str = ""; $(".thumb_up").each(function(){ var id = $(this).attr('id').split('like_post_'); str +

jQuery选择器
$(“.thumb\u up”)
返回如下表单的集合:

[<form id="like_post_78" ...</form> <form id="like_post_79"> ... </form>]
最有效的方法是什么

var str = "";
$(".thumb_up").each(function(){
    var id = $(this).attr('id').split('like_post_');
    str += id[1] + ',';
});
最后你会得到一个额外的“,”,但是你可以通过这个基本的例子得到你想要的


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

最简单的方法可能是:

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

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

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


在考虑了@James Hill的准确观察(如下)后编辑了最有效的:

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

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

var form_id=[];
var forms=document.getElementsByTagName('form');

对于(var i=0;i而言,最简单的方法可能是:

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

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

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


在考虑了@James Hill的准确观察(如下)后编辑了,这是最简单的!=最有效的:

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

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

var form_id=[];
var forms=document.getElementsByTagName('form');

对于(var i=0;i选项1

将jQuery函数与类选择器结合使用:

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();
var-aryIDs=[];
var divs=$(“.thumb_up”);
对于(变量i=0;i
下面是后一个例子的例子

性能


至于性能,for循环应该每次都更快。请查看我创建的一个示例,比较.each().map()标准for循环的性能

将jQuery函数与类选择器结合使用:

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();
<代码>var aryId=[]; var divs=$(“.thumb_up”); 对于(变量i=0;i
下面是后一个例子的例子

性能


至于性能,for循环每次都应该更快。请查看我创建的一个示例,比较性能。each().map(),以及循环的标准

仅就记录而言,文档中的每个表单都有一个document.forms集合,因此获取所有表单ID的数组非常简单:

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

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

如果您对“效率”的定义意味着最快,那么上述内容应该围绕jQuery的任何答案()。如果您只需要具有特定类的表单,则通过在循环中测试表单的className属性将其过滤掉并不困难。

仅为了记录,文档中的每个表单都有一个document.forms集合,因此获取所有表单ID的数组非常简单:

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

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

如果您对“效率”的定义意味着最快,那么上述内容应该围绕jQuery的任何答案()。如果您只需要具有特定类的表单,则通过在循环中测试表单的className属性将其过滤掉并不困难。

我认为,一旦您习惯了它,就会出现这种情况。从
each()
(以及其他类似循环)到
map()肯定需要一段时间
为了实现这一举措的好处。@DavidThomas,很好的解决方案,我没有投反对票,但请记住,OP要求的是最有效的方法,而不是最简单的方法。我想这取决于您或OP如何选择解释“高效”,我认为,因此使用易于阅读/编写的方法,而不是最低限度的方法-CPU密集型方法。但你是对的,这当然是一个公平的观点(这就是为什么在你留下评论之前我稍微编辑了正则表达式)…@DavidThomas同意,硬件很便宜,但由于这是在客户机上运行的JS,并不是每个人都会拥有美国开发人员喜欢的口径机器。同样,回答很好,编辑也很好-以至于我也编辑了我的(不是说我有任何升级票:D)@JamesHill,决定完成你的指针,并把一个本地JavaScript的替代方案也放在一起。并对两者进行比较。我认为,一旦你习惯了它。我确实花了一段时间从
each()
(和其他类似循环)移动到
map()
为了实现这一举措的好处。@DavidThomas,很好的解决方案,我没有投反对票,但请记住,OP要求的是最有效的方法,而不是最简单的方法。我想这取决于您或OP如何选择解释“高效”,我认为,因此使用易于阅读/编写的方法,而不是最低限度的方法-CPU密集型方法。但你是对的,这当然是一个公平的观点(这就是为什么在你留下评论之前我稍微编辑了正则表达式)…@DavidThomas同意,硬件很便宜,但由于这是在客户机上运行的JS,并不是每个人都会拥有美国开发人员喜欢的高质量机器。同样,回答很好,编辑也很好-我已经做了很多