Javascript jQuery按类计数元素
我有一段代码,其中我需要循环遍历具有特定类名的表中的所有元素(每个表行中只有一个元素具有此类,即复选框)。我正在使用jQuery的Javascript jQuery按类计数元素,javascript,jquery,html,Javascript,Jquery,Html,我有一段代码,其中我需要循环遍历具有特定类名的表中的所有元素(每个表行中只有一个元素具有此类,即复选框)。我正在使用jQuery的$(“.className”).each(函数(){})执行此操作的功能。除了一个问题外,代码的工作方式与它应该的完全一样。我有一个大约600行的表,每行有一个类的复选框,所以这个类有600个复选框元素。然而,当我尝试循环通过180上的所有这些元素时,都找到了。我试图用下面的代码对这些元素进行计数 var count = $('.importCheck').leng
$(“.className”).each(函数(){})代码>执行此操作的功能。除了一个问题外,代码的工作方式与它应该的完全一样。我有一个大约600行的表,每行有一个类的复选框,所以这个类有600个复选框元素。然而,当我尝试循环通过180上的所有这些元素时,都找到了。我试图用下面的代码对这些元素进行计数
var count = $('.importCheck').length;
console.log("Number of elements = " + count);
它仍然只罚款约180个元素。但是,如果我在浏览器中查看表的源代码,则该类中的所有600行和元素都会出现。我不明白为什么在网格中找不到这个类的所有元素。
任何想法
这里是完整的方法
提前谢谢
function importCheckedOrders(){
// Display the loader.
$('#loadingDiv').addClass('cssLoader');
$('#loadingDivBackground').addClass('cssBackground');
var obj = {};
var count = $('.importCheck').length; // Count how many rows to check as we want to start another process after
console.log("Number of elements = " + count);
$("#importChecked").hide(); // Hide the button so the user can't hit it again (cause their still stupid).
// the last one is checked and processed in the .each loop .
$(".importCheck").each(function(){
if( $(this).prop("checked") ) // If checkbox is checked then add the movement.
{
var orderID = $(this).val();
// var tempArr = new Array();
obj[orderID] = {
orderID: orderID, // ID of resource(or order) being dragged.
orderDate: $("#"+orderID+"_order_date").val(),
orderType: $("#"+orderID+"_orchid_type").val(),
accountID: $("#"+orderID+"_orchid_id").val(),
currency: $("#"+orderID+"_order_currency").val(),
rate: $("#"+orderID+"_order_rate").val(),
bookedWith: $("#"+orderID+"_order_booked").val(),
ref: $("#"+orderID+"_order_ref").val(),
haz: $("#"+orderID+"_order_haz").val()
};
$("#"+orderID+"_orderButton").hide(); // Hide the button so the user can't hit it again (cause their stupid).
}
if(!--count)
{
var rootPath = $("#rootPath").val();
// Grab all the data to create a new transaction and post it.
$.ajax({
url: rootPath+"edi/addOrderTicked",
data:{
_token: $('meta[name="_orchid_token"]').attr('content'),
orders: JSON.stringify(obj), // stringfy object and pass it to the server for php processing.
},
type: 'post',
success: function(data){
$(data).each(function(a, b) {
$("#order_tr_"+b).hide(); // Hide the row.
$('#loadingDiv').removeClass('cssLoader');
$('#loadingDivBackground').removeClass('cssBackground');
$("#importChecked").show();
});
}
});
}
});
}
没有jQuery,您有相同的结果吗
长度:
Array.prototype.slice.call(
document.getElementsByClassName("MyClass")
).length
ForEach:
Array.prototype.slice.call(
document.getElementsByClassName("MyClass")
).forEach(function(element, index, array){
... do stg ...
})
这样试试看,你会得到什么:
$.each(".importCheck",function(){
我知道它也可以按你的方式工作,但我不确定有什么区别。。。。但当一个不起作用时,我会尝试另一个。如果这不起作用,那么代码看起来是正确的,因此可能需要再次检查该表,看看是否实际有600个元素
Ref:您可以对每条语句执行$,并在$(数据)中使用一个计数器变量。每个(…)
循环,可能是$(“#importChecked”).show()代码>应为$(“.importChecked”).show()代码>??或$(文档).find(“.importChecked”).show()代码>如果一些是由Ajax动态创建的。。。当然,
是错误的。“但是如果我查看表的源代码…”怎么办?您是使用视图源还是检查元素?因为ViewSource将向您显示标记在页面加载时的外观,而不是此后的修改方式。因此,如果您查看的是view source,则完全有可能这些类已从最初拥有它们的某些元素中删除。可能与我同意@Taplar有关,可能是删除了这些元素或动态更改了它们的类。您不需要[].slice.call
。您可以只使用document.getElementsByCassName(“MyClass”).length
Small side注意,您也可以使用Array.prototype而不是[]来避免仅仅为了方法访问而创建新数组@DafuckYeah true,其目的是保持两个函数之间的连续性。forEach不处理HTMLCollections