2016-08-24 2 views
0

У меня есть HTML таблицу, подобную этойЗаменить повторяющееся значение в каждом столбце и как нуль

enter image description here

Я хочу заменить все повторяющиеся значения в первых двух столбцов следует заменить нулем т.е. выход похож на этот

enter image description here

Добавлен HTML-код ниже для справки

table, th, td { 
 
    border: 1px solid black; 
 
} 
 
table { 
 
    border-collapse: collapse; 
 
}
<table > 
 
    <thead> 
 
     <tr > 
 
     <th>ABBEY  </th> 
 
     <th>ANX </th> 
 
     <th>TPIN</th> 
 
     <th>ACP</th> 
 
     <th>4</th> 
 
     <th>3</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody> 
 
     <tr> 
 
     <td>ABNAMRO </td> 
 
     <td>ANW </td> 
 
     <td>TPIN</td> 
 
     <td>ACP</td> 
 
     <td>32</td> 
 
     <td>32</td> 
 
     </tr> 
 
     <tr> 
 
     <td>ABNAMROLLC</td> 
 
     <td>MLD </td> 
 
     <td>TPIN</td> 
 
     <td>ACP</td> 
 
     <td>10</td> 
 
     <td>10</td> 
 
     </tr> 
 
     <tr> 
 
     <td>AMHERSTP </td> 
 
     <td>QPE</td> 
 
     <td>GRAM</td> 
 
     <td>ACP</td> 
 
     <td>341</td> 
 
     <td>&nbsp;</td> 
 
     </tr> 
 
     <tr> 
 
     <td>&nbsp;</td> 
 
     <td>&nbsp;</td> 
 
     <td>GRAM</td> 
 
     <td>RJT</td> 
 
     <td>56</td> 
 
     <td>&nbsp;</td> 
 
     </tr> 
 
     <tr> 
 
     <td>&nbsp;</td> 
 
     <td>QPE </td> 
 
     <td>TPIN</td> 
 
     <td>ACP</td> 
 
     <td>24</td> 
 
     <td>19</td> 
 
     </tr> 
 
     <tr> 
 
     <td>&nbsp;</td> 
 
     <td>QPP</td> 
 
     <td>GRAM</td> 
 
     <td>ACP</td> 
 
     <td>353</td> 
 
     <td>&nbsp;</td> 
 
     </tr> 
 
     <tr> 
 
     <td>&nbsp;</td> 
 
     <td>&nbsp;</td> 
 
     <td>GRAM</td> 
 
     <td>RJT</td> 
 
     <td>2</td> 
 
     <td>&nbsp;</td> 
 
     </tr> 
 
     <tr> 
 
     <td>BAKERGRP </td> 
 
     <td>JBC</td> 
 
     <td>GRAM</td> 
 
     <td>ACP</td> 
 
     <td>337</td> 
 
     <td>142</td> 
 
     </tr> 
 
     <tr> 
 
     <td>&nbsp;</td> 
 
     <td>&nbsp;</td> 
 
     <td>GRAM</td> 
 
     <td>RJT</td> 
 
     <td>3</td> 
 
     <td></td> 
 
     </tr> 
 
    </tbody> 
 
</table>

Fiddle

+0

Добро пожаловать в SO. Пожалуйста, посетите [помощь] и возьмите [тур], чтобы узнать, что и как спросить. СОВЕТ: Почтовый код и усилие. Теперь ваш вопрос принадлежит elance.com – mplungjan

ответ

1

Может быть, немного что-то вроде следующего.

columnsToProcess Объект должен указать true для нуля на основе индексов столбцов столбцов для обработки. Для вашего заявленного требования выполнять первые два столбца только я мог бы просто использовать селектор "td:lt(2)" вместо этого, но использование объекта для указания того, какие столбцы для обработки более универсальны, в случае, например, вы позже хотели обработать первый, четвертые и шестые колонки:

columnsToProcess = { 0: true, 3: true, 5: true } 

объект lastVals отслеживает последнее измененное значение для каждого столбца. Не нужно инициализировать свои элементы вообще, потому что, когда мы тестируем lastVals[i], он просто вернет undefined, если еще не инициализирован, а undefined не равен ни одной строке.

var columnsToProcess = { 
 
    0: true, 
 
    1: true 
 
}; 
 
var lastVals = {}; 
 
$("table tbody tr").each(function() {  // for each row 
 
    $(this).find("td").each(function(i) { // for each cell in the current row 
 
    if (!columnsToProcess[i]) return;  // do we care about this column? 
 
    if (this.innerHTML === lastVals[i]) // if value is same as the previous row 
 
     this.innerHTML = "&nbsp;";   // blank out the cell 
 
    else         // otherwise 
 
     lastVals[i] = this.innerHTML;  // remember the current value 
 
    }); 
 
});
table, th, td { border: 1px solid black; } 
 
table { border-collapse: collapse; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<table> 
 
    <thead> 
 
    <tr><th>ABBEY</th><th>ANX</th><th>TPIN</th><th>ACP</th><th>4</th><th>3</th></tr> 
 
    </thead> 
 
    <tbody> 
 
    <tr><td>ABNAMRO</td><td>ANW</td><td>TPIN</td><td>ACP</td><td>32</td><td>32</td></tr> 
 
    <tr><td>ABNAMROLLC</td><td>MLD</td><td>TPIN</td><td>ACP</td><td>10</td><td>10</td></tr> 
 
    <tr><td>AMHERSTP</td><td>QPE</td><td>GRAM</td><td>ACP</td><td>341</td><td>&nbsp;</td></tr> 
 
    <tr><td>AMHERSTP</td><td>QPE</td><td>GRAM</td><td>RJT</td><td>56</td><td>&nbsp;</td></tr> 
 
    <tr><td>AMHERSTP</td><td>QPE</td><td>TPIN</td><td>ACP</td><td>24</td><td>19</td></tr> 
 
    <tr><td>AMHERSTP</td><td>QPP</td><td>GRAM</td><td>ACP</td><td>353</td><td>&nbsp;</td></tr> 
 
    <tr><td>AMHERSTP</td><td>QPP</td><td>GRAM</td><td>RJT</td><td>2</td><td>&nbsp;</td></tr> 
 
    <tr><td>BAKERGRP</td><td>JBC</td><td>GRAM</td><td>ACP</td><td>337</td><td>142</td></tr> 
 
    <tr><td>BAKERGRP</td><td>JBC</td><td>GRAM</td><td>RJT</td><td>3</td><td></td></tr> 
 
    </tbody> 
 
</table>

Оставшись в качестве упражнения для читателя: подстроечного пробелы перед сравнением значений, если "AMHERSTP" и "AMHERSTP " должны считаться равными.

Смежные вопросы