Как присвоить уникальный идентификатор строки строкам в таблице отображаемых тегов?

Я использую тег отображения, чтобы показать список пользователей на моем JSP. У меня есть кнопка удаления в каждой строке, чтобы удалить конкретную строку/пользователя из списка. Для этого я использую ajax.

Пользователь удаляется из базы данных с помощью ajax. Но так как я использую ajax. Пока я не обновлю страницу, пользователь все еще находится в списке отображаемых тегов.

Есть ли способ удалить строку из таблицы отображения с помощью javascript?

Насколько я думаю, строку можно удалить из таблицы с помощью javascript, но вам нужно знать хотя бы идентификатор строки.

Итак, как мне присвоить уникальные идентификаторы строк каждой строке отображаемой таблицы?

пожалуйста помоги.

Ниже мой код

<display:table name="employeeUpdateList" pagesize="50" 
    class="listingTable" keepStatus="true" cellpadding="0px"
    cellspacing="0px" id="employeeUpdate" export="true" requestURI="">
    <display:setProperty name="export.decorated" value="true" />
    <display:setProperty name="export.excel.filename"
        value="Employee Update List.xls" />
    <display:column title="What is changed" property="columnName"></display:column>
    <display:column title="From" property="oldValue"></display:column>
    <display:column title="To" property="newValue"></display:column>
    <display:column title="Effective Date">
        <fmt:formatDate value="${employeeUpdate.effectiveDate}"
            pattern="dd MMMM yyyy" />
    </display:column>
    <display:column title="Changed By" property="changedBy.fullname"></display:column>
    <display:column title="Changed On">
        <fmt:formatDate value="${employeeUpdate.changedOn }"
            pattern="dd MMMM yyyy hh:mm:ss" />
    </display:column>
    <display:column media="html"
        style="text-align :center!important;padding:0px!important">
        <input class="input-button-small" type="button"
            value="<spring:message code='button.delete' />"
            onclick="deleteEmployeeUpdate('${deleteEmployeeUpdateUrl}','${employeeUpdate.id}')" />
    </display:column>
    <display:setProperty name="paging.banner.item_name"
        value="Employee Update" />
    <display:setProperty name="paging.banner.items_name"
        value="Employee updates " />
</display:table>

person ashishjmeshram    schedule 23.04.2012    source источник
comment
Если вы используете jQuery, вы можете просто сделать это в событии нажатия кнопки: $(this).parent('tr').remove()   -  person binarious    schedule 23.04.2012
comment
@Т.Дж. Краудер. Я добавил свой код.   -  person ashishjmeshram    schedule 23.04.2012
comment
@Ashish: Хорошая сделка, я обновил свой ответ.   -  person T.J. Crowder    schedule 23.04.2012


Ответы (1)


Обновление. Теперь, когда вы опубликовали свой код, я вижу, что вы используете обработчики DOM0 onclick="...". Я не рекомендую этого делать (см. ниже, это классический вариант использования делегирования событий, отслеживающий клики на уровне таблицы, а не на отдельных кнопках), но...

Вы захотите изменить свою функцию deleteEmployeeUpdate, чтобы она принимала другой аргумент, которым будет кнопка, на которую нажали. Так:

onclick="deleteEmployeeUpdate(this, '${deleteEmployeeUpdateUrl}','${employeeUpdate.id}')"

а также

function deleteEmployeeUpdate(button, url, id) {
    // ...
}

Затем, чтобы удалить строку, содержащую кнопку, внутри этой функции:

var row = button.parentNode;
while (row && row.tagName.toLowerCase() !== "tr") {
    row = row.parentNode;
}
if (row) {
  row.parentNode.removeChild(row);
}

См. ниже решение с использованием делегирования событий, а ниже — полезное чтение.


Вам не нужно указывать идентификаторы строк. Когда вы обрабатываете событие click на кнопке удаления, обычно у вас есть ссылка на этот элемент кнопки удаления как this. У него есть свойство parentNode, которое узел (элемент), который его содержит. Вероятно, это ячейка таблицы (td). У него также есть свойство parentNode, которое предположительно является строкой (tr), у которой также есть родитель, обычно tbody, и т. д.

Вы можете удалить строку, вызвав removeChild ее родительского узла. function и передать элемент tr.

Вот полный пример: Динамическая копия | источник

HTML:

<table id="theTable">
  <tbody>
    <tr><td>First row</td><td><button class="delete">Delete</button></td></tr>
    <tr><td>Second row</td><td><button class="delete">Delete</button></td></tr>
    <tr><td>Third row</td><td><button class="delete">Delete</button></td></tr>
    <tr><td>Fourth row</td><td><button class="delete">Delete</button></td></tr>
  </tbody>
</table>

JavaScript:

(function() {

  // Get a reference to the table
  var theTable = document.getElementById("theTable");

  // Watch for clicks
  hookEvent(theTable, "click", function(event) {
    var elm, row, tbody;
    elm = event.target
    while (elm && elm.className !== "delete") {
      elm = elm.parentNode;
    }
    if (elm) {
      // It's the delete button, remove this row
      row = elm.parentNode.parentNode; // Parent of button's parent
      tbody = row.parentNode;
      tbody.removeChild(row);
    }
  });

  // === Basic utility functions

  function display(msg) {
    var p = document.createElement('p');
    p.innerHTML = String(msg);
    document.body.appendChild(p);
  }

  function hookEvent(element, eventName, handler) {
    // Very quick-and-dirty, recommend using a proper library,
    // this is just for the purposes of the example.
    if (typeof element.addEventListener !== "undefined") {
      element.addEventListener(eventName, handler, false);
    }
    else if (typeof element.attachEvent !== "undefined") {
      element.attachEvent("on" + eventName, function(event) {
        return handler(event || window.event);
      });
    }
    else {
      throw "Browser not supported.";
    }
  }
})();

Чтение:


Между прочим, я настоятельно рекомендую использовать хорошую библиотеку JavaScript, например jQuery, Прототип, YUI, Закрытие или любой из нескольких других. Пример становится значительно короче, что показывает, как вы можете сосредоточиться на том, что вы пытаетесь построить, а не возиться с деталями низкоуровневого API DOM.

Например, приведенное выше с использованием jQuery: Динамическая копия | источник

HTML:

(без изменений)

JavaScript:

jQuery(function($) {
  $("#theTable").on("click", "button.delete", function() {
    $(this).closest("tr").remove();
  });
});

Это для jQuery 1.7 и более поздних версий. Если вы используете что-то более раннее, вы должны использовать delegate, а не on (обратите внимание на порядок изменения аргументов):

jQuery(function($) {
  $("#theTable").delegate("button.delete", "click", function() {
    $(this).closest("tr").remove();
  });
});

Это было бы так же просто с любой другой библиотекой.

person T.J. Crowder    schedule 23.04.2012