Добавить строку в jQuery

каков наилучший метод в jQuery для добавления дополнительной строки в таблицу в качестве последней строки?

это приемлемо?

$('#myTable').append('<tr><td>my data</td><td>more data</td></tr>');

существуют ли ограничения на то, что вы можете добавить в таблицу (например, входные данные, выбор, количество строк)?

3 ответов


подход, который вы предлагаете, не гарантирует, что даст вам результат, который вы ищете - что, если бы у вас был tbody например:

<table id="myTable">
  <tbody>
    <tr>...</tr>
    <tr>...</tr>
  </tbody>
</table>

в конечном итоге вы получите следующее:

<table id="myTable">
  <tbody>
    <tr>...</tr>
    <tr>...</tr>
  </tbody>
  <tr>...</tr>
</table>

поэтому я бы рекомендовал этот подход вместо этого:

$('#myTable tr:last').after('<tr>...</tr><tr>...</tr>');

вы можете включить что-нибудь в after() метод, пока он действителен HTML, включая несколько строк в соответствии с приведенным выше примером.

обновление: Revisiting этот ответ после недавней активности с этим вопросом. eyelidlessness делает хороший комментарий, что там всегда будет tbody в DOM; это верно, но только если есть хотя бы одна строка. Если у вас нет строк, не будет tbody если вы не указали сами.

DaRKoN_ предполагает добавляя к tbody вместо добавления контента после последнего tr. Это обходит проблему отсутствия строк, но все же не пуленепробиваемый, как вы теоретически может иметь несколько tbody элементы и строка будут добавлены к каждому из них.

взвешивая все, я не уверен, что есть одно-строчное решение, которое учитывает каждый возможный сценарий. Вы должны убедиться в jQuery подсчитывает код с разметки.

я думаю, что самым безопасным решением, вероятно, является обеспечение вашего table всегда включает по крайней мере один tbody в вашей разметке, даже если у нее нет строк. На этой основе вы можете использовать следующее, которое будет работать, сколько строк у вас есть (а также учитывать несколько tbody элементы):

$('#myTable > tbody:last-child').append('<tr>...</tr><tr>...</tr>');

jQuery имеет встроенное средство для управления элементами DOM на лету.

вы можете добавить что-нибудь к вашей таблице, как это:

$("#tableID").find('tbody')
    .append($('<tr>')
        .append($('<td>')
            .append($('<img>')
                .attr('src', 'img.png')
                .text('Image cell')
            )
        )
    );

на $('<some-tag>') вещь в jQuery-объект тега, который может иметь несколько attr атрибуты, которые можно установить и получить, а также text, который представляет текст между тегом здесь: <tag>text</tag>.

это довольно странный отступ, но вам легче увидеть, что происходит в этом образец.


так что все изменилось с тех пор @Luke Bennett отвечал на этот вопрос. Вот обновление.

jQuery с версии 1.4 (?) автоматически определяет, если элемент, который вы пытаетесь вставить (используя любой из append(), prepend(), before() или after() методов) - это <tr> и вставляет его в первый <tbody> в вашем столе или оборачивает его в новый <tbody> если он не существует.

Итак, да, ваш пример кода приемлем и будет отлично работать с jQuery 1.4+. ;)

$('#myTable').append('<tr><td>my data</td><td>more data</td></tr>');