jQuery选择器$(".thumb_up")
返回如下形式的集合:
[<form id="like_post_78" ...</form> <form id="like_post_79"> ... </form>]
最终我想生成一个由表单ID的数字结尾部分组成的字符串。
"78,79"
最有效的方法是什么?
答案 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...
我刚刚更新了上面的正则表达式部分,从/[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);
编辑在考虑了@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 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属性来过滤它们并不困难。