如何使用jQuery检查表中单元格之间的相等性

时间:2013-07-23 21:09:56

标签: javascript jquery arrays

我有一个带有m行的n列表。我想检查一行中每个单元格之间的相等性。 我的想法是将每个值存储在二维数组中并运行'for loop'来检查值是否相等,但我认为该解决方案效率不高。我还使用nth-child选择器存储单元格值并将它们放入临时数组中。有谁知道更快更容易的解决方案?我需要比较每列的m值,如果值不同,则应该从表中删除该行。

例如:

enter image description here

运行“检查差异”功能后,结果应为:

enter image description here

表是用div的

构建的
<div class="provider">
    <div class="row">1000</div>
    <div class="row">1500</div>
    <div class="row">1120</div>
</div>
<div class="provider">
    <div class="row">1000</div>
    <div class="row">1200</div>
    <div class="row">1120</div>
</div>
<div class="provider">
    <div class="row">2200</div>
    <div class="row">1700</div>
    <div class="row">1120</div>
</div>
<div class="provider">
    <div class="row">3700</div>
    <div class="row">3300</div>
    <div class="row">1120</div>
</div>

js的一部分:

for(j = 0; j < rowsCounter; j++) {
    for (i = 0; i < colsCounter; i++) {
        buf[j][i] = $('.provider:nth-child(' + i + ') div:nth-child(' + j + ')').text();
    }
}

下一部分几乎相同,但运行buf数组并检查值的相等性。

3 个答案:

答案 0 :(得分:0)

使用jquery的each()children()功能循环浏览div.provider.rows

然后使用变量存储text()并将文本与每次迭代进行比较。如果迭代不匹配,请删除parent()

var text;

$('div.provider').each(function() {
    text = '';
    $(this).children().each(function() {
        var $row = $(this);
        if (text === '') {
            text = $row.text();
        }
        if (text !== $row.text()) {
            $row.parent().remove();
            return false;
        }
    });
});

jsfiddle

答案 1 :(得分:0)

:nth-child - 选择器非常慢,如果像这样使用效率极低。将该代码段更改为

$(".provider").each(function(j) {
    $(this).children().each(function(i) {
        buf[i][j] = $(this).text();
    });
});
  

下一部分几乎相同

我简直不敢相信。如果真的如此,你可以做类似的改进。

答案 2 :(得分:0)

要获得更具伸缩性的方法,您可以使用以下内容:

var buf=[];

$('.provider').each(function(){
    var rows=[];
    $('.row', this).each(function(){
        rows.push( parseInt( $(this).text().trim() ));
    });
    buf.push(rows);
});

理想情况下,你绝不应该假设“所有孩子”或“所有某些东西”都是你想要处理的元素的一部分。最好的是要知道你需要什么确切的元素。在这种情况下,所有.row都嵌套在.provider

看看这个工作FIDDLE