如果在jquery的TD中有特定的文本,如何删除TR?

时间:2017-02-06 20:44:52

标签: javascript jquery html html-table

如果第二个TD值与另一个TRs TD值类似,我想删除TR,并且它的最后一个TD值不应该是HIT。另一种情况是,如果我有3个具有相同数据的TR,那么应该删除其中的2个,并且应该保留1个。

示例:

UPDATE [TblTest] 
SET column.WRITE(@input, NULL, 1)  -- length is ignored
WHERE [TblTestID] = @id

我想要的是什么:

<table>
<tr>
    <td>ID</td>
    <td>Ref No</td>
    <td>Name</td>
    <td>Result</td>
</tr>

<tr>
   <td>1</td>
   <td>1121</td>
   <td>Joseph</td>
   <td>CLEAR</td>
</tr>

<tr>
   <td>2</td>
   <td>1122</td>
   <td>Mike</td>
   <td>CLEAR</td>
</tr>

<tr>
   <td>3</td>
   <td>1122</td>
   <td>Mike</td>
   <td>CLEAR</td>
</tr>

<tr>
   <td>4</td>
   <td>1122</td>
   <td>Mike</td>
   <td>HIT</td>
</tr>

<tr>
   <td>5</td>
   <td>1123</td>
   <td>Jim</td>
   <td>HIT</td>
</tr>

<tr>
   <td>6</td>
   <td>1124</td>
   <td>James</td>
   <td>CLEAR</td>
</tr>

<tr>
   <td>7</td>
   <td>1124</td>
   <td>James</td>
   <td>CLEAR</td>
</tr>

<tr>
   <td>8</td>
   <td>1124</td>
   <td>James</td>
   <td>CLEAR</td>
</tr>

</table>

有人可以告诉我如何完成这项任务吗?

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

所以我为你做了这个笨拙的回答。您可以在fiddle here

中查看

编辑:在讨论了应该是什么行为后,我更新了小提琴。所以现在它添加了检查,如果重复项中的任何字段在第四列中具有“HIT”值,它将保持第一行具有HIT值,否则它将保留每个唯一第二列值的第一个值。

我确信使用jQuery有更好/更简单/更有效的方法,但这就是我想出来的。基本算法是:获取所有行并迭代。对于每一行:在第二个td(列)中找到值,检查所有后续行,在那里获取第二列中的值并进行比较。如果它们相同,则从DOM中删除重复的行。

//get the table rows, this should be done with a different selector if there are more tables e.g. with class or id...
$tableRows = $("tr");

//iterate over all elements (rows)
$tableRows.each(function(index, element) {
  var $element = $(element);
  //get the value of the current element
  var currentRowValue = $element.find("td:nth-child(2)").text();

  //check all elements that come after the current element if the value matches, if so, remove the matching element
  for (var i = index + 1; i < $tableRows.length; i++) {
    var $rowToCompare = $($tableRows[i]);
    var valueToCompare = $rowToCompare.find("td:nth-child(2)").text();

    if(valueToCompare === currentRowValue) {
      //remove the duplicate from dom
      //if the second row (the duplicate) has 4th column of "HIT" then keep the second row and remove the first row
      var duplicateRowFourthColumnVal = $rowToCompare.find("td:nth-child(4)").text();
      if(duplicateRowFourthColumnVal == "HIT") {
        $element.remove();
      }
      else {
        $rowToCompare.remove();
      }
    }
  }
});`