我想编写一个简单的javascript脚本,从网站上的大量复选框项目中进行选择。假设我想选择第3个,第12个和第25个复选框。我该怎么办?现在它选择每个项目。
var script = document.createElement('script');
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
script.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(script);
$("#detail input:checkbox").click();
答案 0 :(得分:1)
我会使用filter()
和prop()
var indexesToCheck = [2,11,24];
$("#detail input:checkbox").filter(function(index){
return $.inArray( index, indexesToCheck ) > -1;
/* OR something like*/
return $(this).hasClass('someClass');
}).prop('checked',true);
由于不清楚你打算如何确定哪些被检查,我使用了一个简单的数组。您可以使用this
检查过滤器中的类或任何其他元素属性,这将是每个元素的实例
参考文献:
答案 1 :(得分:0)
<input type="checkbox" name="multi_selection"/>
var idArr = [];
$.each($("input[name='multi_selection']:checked"), function(){
idArr.push($(this).val());
});
现在idArr
是所选复选框的数组...... alert(idArr)
答案 2 :(得分:0)
我将在javascript和等效的jQuery中提供解决方案。我添加了最后一个解决方案(我最喜欢的),它将是通用的,创建一个自定义伪选择器。
对于javascript,我选择了所有输入并验证其类型。当类型为复选框时递增计数器。然后我与我想要选择的索引数组进行比较,然后将元素推送到包含所有元素的最终数组(mySelection):
var mySelection = [];
var checkboxIndexes = [3,12,25];
var checkCounter = 0;
var allInputs = document.getElementsByTagName("input");
for(var i=0;i<allInputs.length;i++) {
if (allInputs[i].type == 'checkbox') {
if(checkboxIndexes.indexOf(checkCounter) > -1;)
mySelection.push(allInputs[i]);
checkCounter++;
}
};
对于你可以使用的jQuery:
$('#detail input:checkbox:eq(index)');
但是我做了一个使用过滤器的javascript。我个人更喜欢这个解决方案,因为你可以在一个数组中选择所有索引:
var checkboxIndexes = [3, 12, 25];
var mySelection = $("#detail input:checkbox").filter(function(index) {
return checkboxIndexes.indexOf(index) > -1;
});
最后一个解决方案是一个通用的解决方案,它允许创建一个我称为&#34; multieq&#34;的自定义伪选择器。目标是使用&#34; multieq&#34;以这种方式直接从选择器过滤:
var mySelection = $("input:checkbox:multieq(3, 12, 25)");
这是我用来创建伪选择器的代码:
$.expr[':'].multieq = $.expr.createPseudo ?
$.expr.createPseudo(function(match) {
var checkboxIndexes=match.split(',');
for(var i=0; i<checkboxIndexes.length;i++) checkboxIndexes[i] = parseInt(checkboxIndexes[i], 10);
var index=-1;
return function( elem, doc, isXML ) {
index++;
return checkboxIndexes.indexOf(index) > -1;
};
}) :
function( elem, index, match ) {
var checkboxIndexes=match[3].split(',');
for(var i=0; i<checkboxIndexes.length;i++) checkboxIndexes[i] = parseInt(checkboxIndexes[i], 10);
return checkboxIndexes.indexOf(index) > -1;
};
//Now we can use this:
var mySelection = $("input:checkbox:multieq(3, 12, 25)");
由于1.8+ $ .expr在某些情况下中断并且不包括param索引,因此建议使用createPseudo(),这就是为什么在1.8下的jQuery版本有一个回退函数。 createPseudo,既不包括索引,也允许我们创建索引(作为计数器)。
我希望它有所帮助!