2016-08-03 4 views
0

列を検索する動的な方法を探していて、値が変更されたときに新しい行を挿入する必要があります。JQuery - テキストを変更したときに列を検索すると、前に新しい行が追加されます

以下の表を検討してください。

<table id="testTable"> 
    <tbody> 
    <tr> 
     <th>Letter</th> 
     <th>Amount</th> 
    </tr> 
    <tr> 
     <td class="parent">A</td> 
     <td>110</td> 
    </tr> 
    <tr> 
     <td class="parent">A</td> 
     <td>99</td> 
    </tr> 
    <tr> 
     <td class="parent">A</td> 
     <td>106</td> 
    </tr> 
    <tr> 
     <td class="parent">A</td> 
     <td>120</td> 
    </tr> 
    <tr> 
     <td class="parent">C</td> 
     <td>103</td> 
    </tr> 
    </tbody> 
</table> 

そのような親クラスで「C」に「A」から行くような変化を検出すると、私は「C」または任意の値の前に挿入された行を希望以前のものと異なるかもしれない。私は一種のいくつかのデータをキャプチャするためにこれを始めているが、これまで得ていない:

$('#' + value + ' .parent').each(function() { 
     var firstVal = $(this).html(); 
     var secondVal = $(this).next().html(); 
     if(firstVal == secondVal) { 
     } 
     else { 
      $(this).parent().after('</tr><tr><td class="sub0">Sub Total</td></tr>'); 
     } 
    }) 

をあなたがしなければならないすべては、このような値とprepend行を比較している私のJSFiddle

+0

実は、あなたはそれをやりました。 .ready(ドキュメント)を追加するのを忘れました。それをチェックしてください:https://jsfiddle.net/q4gq2u2c/2/ – Mojtaba

+0

実際には変更に遭遇した場合でも新しい行を追加しています。例えば、小計の行は、別の値に遭遇するまで挿入されるべきではありません。一度だけ、Cの前に表示される – sm1l3y

答えて

1
$(document).ready(function(){ 
var lastVal = ''; 
$('#testTable .parent').each(function() { 
     var currentVal = $(this).html(); 
     if(currentVal != lastVal) { 
      $(this).parent().before('</tr><tr><td class="sub0">Sub Total</td></tr>'); 
      lastVal = currentVal; 
     } 
    }); 
}); 

Fiddle

1

を参照してください。

let prev = ""; 
$('.parent').each(function() { 
    let test = $(this).text(); 
    if(test != prev && prev != ""){ 
    //$(this).prepend('<tr><td class="separator"><hr></td></tr>');//add it to the same row... 
    $(this).parent().before('<tr><td colspan="2" class="separator"><hr></td></tr>'); 
    } 
    prev = test; 
    //console.log(test); 
}); 
1

わずかあなたのコードの変更が必要になります。

$(document).ready(function() { 
 
    var lastVal = ''; 
 
    $('#testTable .parent').each(function() { 
 
    var currentVal = $(this).html(); 
 
    if (currentVal != lastVal) { 
 
     $(this).parent().before('</tr><tr><td class="sub0">Sub Total</td></tr>'); 
 
     lastVal = currentVal; 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table id="testTable"> 
 
    <tbody> 
 
    <tr> 
 
     <th>Letter</th> 
 
     <th>Amount</th> 
 
    </tr> 
 
    <tr> 
 
     <td class="parent">A</td> 
 
     <td>110</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="parent">A</td> 
 
     <td>99</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="parent">A</td> 
 
     <td>106</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="parent">A</td> 
 
     <td>120</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="parent">C</td> 
 
     <td>103</td> 
 
    </tr> 
 
    </tbody> 
 
</table>

0

var perent = $('.parent'); 
 
$.each(perent, function(i, y) { 
 
    if ($(perent[i]).html() != $(perent[i + 1]).html()) { 
 
    $(this).parent().after('</tr><tr><td class="sub0">Sub Total</td></tr>'); 
 
    } 
 

 

 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table id="testTable"> 
 
    <tbody> 
 
    <tr> 
 
     <th>Letter</th> 
 
     <th>Amount</th> 
 
    </tr> 
 
    <tr> 
 
     <td class="parent">A</td> 
 
     <td>110</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="parent">A</td> 
 
     <td>99</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="parent">A</td> 
 
     <td>106</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="parent">A</td> 
 
     <td>120</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="parent">C</td> 
 
     <td>103</td> 
 
    </tr> 
 
    </tbody> 
 
</table>

関連する問題