Javascript: изменить строку таблицы HTML - PullRequest
0 голосов
/ 05 сентября 2018

Я создаю шаблон для программного обеспечения цитирования наших компаний, которое генерирует HTML-страницу и динамически заполняет таблицу, причем каждый цитируемый элемент является новой строкой.

Мне нужно проверить конкретный номер детали в цитате, и если он присутствует, мне нужно изменить HTML-код для этой строки.

Вот фрагмент HTML

    <div id="line-items-section" class="section">
<table id="line-item-detail-table" class="table-001">
<tr>
    <!-- <th>
    </th> -->
    <th>
        QTY
    </th>
    <th width="70%">
        Item
    </th>
    <th>
        Unit Price
    </th>
    <th>
        Ext Price
    </th>
</tr>
[Begin_LineItem] [Begin_LineTypeProduct]
<tr id="canChange" class="row-product">
    <!-- <td class="col-option-box">
        [QV_OptionBox]
    </td> -->
    <td class="col-qty">
        [DI_QtyBase]
    </td>
    <td class="col-partnumber">
        [DI_ManufacturerPartNumber]
    </td>
    <td class="col-unit-price">
        [DI_UnitPrice:f=1]
    </td>
    <td class="col-extended-price">
        [DI_ExtendedPrice:f=1]
    </td>
</tr>

<tr class="row-product-description">
    <!-- <td class="col-option-box">
        [QV_OptionBox]
    </td> -->
    <td class="col-qty">
    </td>
    <td colspan="3" class="col-description">
        [DI_Description]
    </td>
</tr>
[End_LineTypeProduct]

У меня есть этот файл Javascript:

var matches = document.querySelectorAll("td.col-partnumber");
    for(var value of matches.values()) {
        //console.log(value.innerText);
        if (value.innerText == "SLAB KIT FORM") {
            var str = '<tr class="row-comment"><td class="col-qty"></td><td colspan="4" class="col-description">[DI_Description]</td></tr>';
            var Obj = document.getElementById('canChange');
            Obj.outerHTML = str;
        }
    }

Я использую querySelectorAll и цикл For, чтобы найти нужный номер детали (я ищу 'SLAB KIT FORM'). Затем с помощью externalHTML измените HTML.

Это частично работает.

В результате номер детали найден, но код изменяет только первую строку таблицы ... искомая строка таблицы может появиться в любом месте таблицы (и даже несколько раз в одной и той же таблице). ).

По сути, мне нужно, чтобы этот код предназначался только для строки таблицы, содержащей ячейку с SLAB KIT FORM

1 Ответ

0 голосов
/ 05 сентября 2018

Вы не должны добавлять один и тот же идентификатор в каждую строку. Как только вы нашли нужную ячейку таблицы через javascript, вы можете найти соответствующую строку через свойство parentNode.

Например, вот так:

window.addEventListener('load', function() {
  const button = document.querySelector('.run-script')
  button.addEventListener('click', function() {
    var matches = document.querySelectorAll("td.col-partnumber");
    for (var value of matches.values()) {
      // console.info(value);
      if (value.innerText == "SLAB KIT FORM") {
        var str = '<tr class="row-comment"><td class="col-qty"></td><td colspan="4" class="col-description">[DI_Description]</td></tr>';
        var Obj = value.parentNode;
        Obj.outerHTML = str;
      }
    }
  })
})
button {
 padding: 1rem;
 background-color: darkred;
 color: white;
 margin-bottom: 1rem;
 width: 25%;
 min-width: 200px;
 font-size: 1.2rem;
 text-transform: uppercase;
 cursor: pointer;
}

table {
    font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
    border-collapse: collapse;
    width: 100%;
}

table td, #customers th {
    border: 1px solid #ddd;
    padding: 8px;
}

table tr:nth-child(even){background-color: #f2f2f2;}

table tr:hover {background-color: #ddd;}

table th {
    padding-top: 12px;
    padding-bottom: 12px;
    text-align: left;
    background-color: #4CAF50;
    color: white;
}
<button class="run-script" type="button">Run Script</button>

<div id="line-items-section" class="section">
  <table id="line-item-detail-table" class="table-001">
    <tr>
      <!-- <th>
        </th> -->
      <th>
        QTY
      </th>
      <th width="70%">
        Item
      </th>
      <th>
        Unit Price
      </th>
      <th>
        Ext Price
      </th>
    </tr>
    <tr class="row-product">
      <td class="col-qty">
        5
      </td>
      <td class="col-partnumber">
        NOT THE PARTNUMBER YOU'RE LOOKING FOR
      </td>
      <td class="col-unit-price">
        40
      </td>
      <td class="col-extended-price">
        forty
      </td>
    </tr>

    <tr class="row-product-description">
      <td class="col-qty">
      </td>
      <td colspan="3" class="col-description">
        some description
      </td>
    </tr>
    <tr class="row-product">
      <td class="col-qty">
        8
      </td>
      <td class="col-partnumber">
        SLAB KIT FORM
      </td>
      <td class="col-unit-price">
        20
      </td>
      <td class="col-extended-price">
        twenty
      </td>
    </tr>

    <tr class="row-product-description">
      <td class="col-qty">
      </td>
      <td colspan="3" class="col-description">
        other description
      </td>
    </tr>
  </table>
</div>
...