0

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

例如:

在此处输入图像描述

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

在此处输入图像描述

表是用 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 数组并检查值的相等性..

4

3 回答 3

0

如果像这样使用:nth-child-selector 会非常缓慢且效率极低。将该片段更改为

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

下一部分几乎相同

我简直不敢相信。如果确实如此,您可以进行类似的改进。

于 2013-07-23T22:09:20.857 回答
0

使用 jquery 的each()andchildren()函数循环遍历你的div.providerand .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

于 2013-07-23T21:47:11.873 回答
0

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

var buf=[];

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

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

看看这个工作FIDDLE

于 2013-07-23T22:19:05.340 回答