6

I have table which is bound dynamically:

<table id="test">
   <tr>
      <td>test1
      <td>
   </tr>
   <tr>
      <td>test2
      <td>
   </tr>
   <tr>
      <td>test1
      <td>
   </tr>
   <tr>
      <td>test2
      <td>
   </tr>
</table>

I want to remove duplicate table rows, producing a result like this.

<table id="test">
   <tr>
      <td>test1
      <td>
   </tr>
   <tr>
      <td>test2
      <td>
   </tr>
</table>

I'm trying to do it through this btnRearrange click.

 $('#btnRearrange').bind("click", function() {
   // want some help hear
 });

Thanks.

4b0
  • 21,981
  • 30
  • 95
  • 142

3 Answers3

25

Try -

var seen = {};
$('table tr').each(function() {
  var txt = $(this).text();
  if (seen[txt])
    $(this).remove();
  else
    seen[txt] = true;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="test">
  <tr>
    <td>test1
      <td>
  </tr>
  <tr>
    <td>test2
      <td>
  </tr>
  <tr>
    <td>test1
      <td>
  </tr>
  <tr>
    <td>test2
      <td>
  </tr>
</table>

Code is taken (and very slightly changed) from this question - JQuery: Remove duplicate elements?

4b0
  • 21,981
  • 30
  • 95
  • 142
ipr101
  • 24,096
  • 8
  • 59
  • 61
  • Excellent and high performance answer. I used a slightly modified version of your code to display a list that has several filters attached to it. So it looks more like `$rows = $('table tr.column-4'); $rows.hide() $rows.each(function() { if ($this.text() == filter && !seen[txt] { $this.show()}});` – danielson317 Jan 07 '17 at 13:45
3
$('#btnRearrange').bind("click", function() {
    var contents = {}, text;
    $("#test td").each(function() {

        text = $(this).text();

        if( !( text in contents ) ) {
            contents[text] = true;
        }
        else {
            $( this.parentNode ).remove();
        }

    });
});

jsfiddle: http://jsfiddle.net/jKs4k/

Robin Andersson
  • 5,150
  • 3
  • 25
  • 44
Esailija
  • 138,174
  • 23
  • 272
  • 326
1

Here you go:

$('#btnRearrange').bind("click", function() {

$("#test td").each(function () {
    var tdText = $(this).text();

    $("#test td")
        .filter(function () { 
            return tdText == $(this).text(); 
        })
        .not(":first")
        .remove();

});
});

Try it out here:

http://jsfiddle.net/MAnLM/3/

Jake Feasel
  • 16,785
  • 5
  • 53
  • 66
  • Could you take look at this question? http://stackoverflow.com/questions/14633435/jquery-delete-almost-same-table-rows/14635390 – brabertaser19 Feb 02 '13 at 11:14