我有一个带有m行的n列表。我想检查一行中每个单元格之间的相等性。 我的想法是将每个值存储在二维数组中并运行'for loop'来检查值是否相等,但我认为该解决方案效率不高。我还使用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数组并检查值的相等性。
答案 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;
}
});
});
答案 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。