Javascript jQuery按类计数元素

Javascript jQuery按类计数元素,javascript,jquery,html,Javascript,Jquery,Html,我有一段代码,其中我需要循环遍历具有特定类名的表中的所有元素(每个表行中只有一个元素具有此类,即复选框)。我正在使用jQuery的$(“.className”).each(函数(){})执行此操作的功能。除了一个问题外,代码的工作方式与它应该的完全一样。我有一个大约600行的表,每行有一个类的复选框,所以这个类有600个复选框元素。然而,当我尝试循环通过180上的所有这些元素时,都找到了。我试图用下面的代码对这些元素进行计数 var count = $('.importCheck').leng

我有一段代码,其中我需要循环遍历具有特定类名的表中的所有元素(每个表行中只有一个元素具有此类,即复选框)。我正在使用jQuery的
$(“.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