jQuery - Удалить столбец таблицы с указанным c значением - PullRequest
1 голос
/ 13 июля 2020

У меня возникла проблема, и мне нужна ваша помощь. У меня есть несколько таблиц с такой структурой:

------------------------------------------------------
|       | Col A  | Col B  | Col C  | Col D  | Col E  |
------------------------------------------------------
| Row 1 | 150    | 0.00   | 2000   | 700    | 0.00   |
------------------------------------------------------
| Row 2 | 175    | 0.00   | 2000   | 700    | 100    |
------------------------------------------------------
| Row 3 | 25     | 0.00   | 1000   | 700    | 0.00   |
------------------------------------------------------

Мне нужно найти и удалить в каждой таблице каждый столбец, который содержит в каждой строке значение «0.00». В приведенном выше примере я не хочу полностью удалять столбец B. Столбец E должен оставаться там, потому что он имеет в строке 2 ненулевое значение.

Я начал с этого, но не знаю, как это sh закончить. Думаю, мне это сложно. У кого-нибудь есть хорошая идея, чтобы помочь мне? Большое спасибо: -)

    searchForZeroCells: function() {

    var obj                 = this;
    var TableCleanUp        = jQuery(obj.settings.selector.TableCleanUp);

    TableCleanUp.each(function() {
        var currentTable = jQuery(this);
        var currentTableRow = currentTable.find('tr');
        var rowsPerTable = currentTableRow.length;

        var rowArray = [];

        currentTableRow.each(function() {
            var currentRow = jQuery(this);
            var cellsPerRow = currentRow.find('td').length;

            if(cellsPerRow > 0) {
                currentRow.find('td').each(function() {
                    var currentCell = jQuery(this);
                    if(jQuery.trim(currentCell.text()) == '0.00') {
                        rowArray.push(currentCell.index());
                        console.log(rowArray);
                    }
                });
            }
        });
    });

}

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

На основе решения Freedom-nm вот моя рабочая версия. Я добавил второе условие, которое также проверяет наличие пустых ячеек:

removeUnwantedData: function() {

    var obj                 = this;
    var TableCleanUp        = jQuery(obj.settings.selector.TableCleanUp);

    TableCleanUp.each(function() {
        var currentTable = jQuery(this);
        var cols = currentTable.find("> thead > tr > th").length;
        var head = currentTable.find("> thead")
        var tbl = currentTable.find("> tbody")

        for (var col = cols; col > 1; --col)
        {
            //console.log(col)
            var rowCells = tbl.find("td:nth-child(" + col + ")");
            var valueCellsZero = rowCells.filter(function() {
                return $.trim($(this).text()) != "0.00";
            });
            var valueCellsEmpty = rowCells.filter(function() {
                return $.trim($(this).text()) != "";
            });
            if (valueCellsZero.length == 0) {
                //console.log("remove zero cells: ", col);
                head.find("th:nth-child(" + col + ")").remove();
                rowCells.remove();
            }
            if (valueCellsEmpty.length == 0) {
                //console.log("remove empty cells: ", col);
                head.find("th:nth-child(" + col + ")").remove();
                rowCells.remove();
            }
        }

    });

}
0 голосов
/ 13 июля 2020

Вот один из способов удалить столбец, используя

td:nth-child(idx)

Цикл от последнего столбца к ColA, чтобы никакие методы remove () не влияли на последующие nth-child проверки:

var cols = $("#table>thead>tr>th").length;
var head = $("#table>thead")
var tbl = $("#table>tbody")

for (var col=cols;col>1;--col)
{
    //console.log(col)
    var rowCells = tbl.find("td:nth-child(" + col + ")");
    var valueCells = rowCells.filter(function() {
       return $(this).text() != "0.00";
    });
    if (valueCells.length == 0)
    {
        console.log("remove", col);
        head.find("th:nth-child(" + col + ")").remove();
        rowCells.remove();
    }
}
td { border: 1px solid #CCC; padding: 2px 4px; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<thead>
<tr>
<th></th><th>Col A</th><th>Col B</th><th>Col C</th><th>Col D</th><th>Col E</th><th>Col F</th></tr>
</thead>
<tbody>
<tr>
<tr><td>Row 1</td><td>150</td><td>0.00</td><td>2000</td><td>700</td><td>0.00</td><td>0.00</td></tr>
<tr><td>Row 2</td><td>175</td><td>0.00</td><td>2000</td><td>700</td><td>0.00</td><td>100</td></tr>
<tr><td>Row 3</td><td> 75</td><td>0.00</td><td>1000</td><td>700</td><td>0.00</td><td>0.00</td></tr>
</tbody>
</table>
<table id='table'>
<thead>
<tr>
<th></th><th>Col A</th><th>Col B</th><th>Col C</th><th>Col D</th><th>Col E</th><th>Col F</th></tr>
</thead>
<tbody>
<tr>
<tr><td>Row 1</td><td>150</td><td>0.00</td><td>2000</td><td>700</td><td>0.00</td><td>0.00</td></tr>
<tr><td>Row 2</td><td>175</td><td>0.00</td><td>2000</td><td>700</td><td>0.00</td><td>100</td></tr>
<tr><td>Row 3</td><td> 75</td><td>0.00</td><td>1000</td><td>700</td><td>0.00</td><td>0.00</td></tr>
</tbody>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...