Qual é o melhor método no jQuery para adicionar uma linha adicional a uma tabela como a última linha?
Isso é aceitável?
$('#myTable').append('<tr><td>my data</td><td>more data</td></tr>');
Existem limitações no que você pode adicionar a uma tabela como esta (como entradas, seleções, número de linhas)?
javascript
jquery
html-table
Darryl Hein
fonte
fonte
Respostas:
A abordagem sugerida não garante o resultado que você procura - e se você tivesse uma,
tbody
por exemplo:Você terminaria com o seguinte:
Portanto, eu recomendaria essa abordagem:
Você pode incluir qualquer coisa dentro do
after()
método, desde que seja HTML válido, incluindo várias linhas, conforme o exemplo acima.Atualização: Revisitando esta resposta após atividades recentes com esta pergunta. eyelidlessness faz um bom comentário que sempre haverá um
tbody
no DOM; isso é verdade, mas apenas se houver pelo menos uma linha. Se você não tiver linhas, não haverá, atbody
menos que você tenha especificado uma.DaRKoN_ sugere anexar ao
tbody
invés de adicionar conteúdo após o últimotr
. Isso contorna a questão de não ter linhas, mas ainda não é à prova de balas, pois teoricamente você poderia ter váriostbody
elementos e a linha seria adicionada a cada um deles.Pesando tudo, não tenho certeza de que exista uma única solução de uma linha que responda a todos os cenários possíveis. Você precisará garantir que o código jQuery corresponda à sua marcação.
Acho que a solução mais segura é garantir que você
table
sempre inclua pelo menos umatbody
na sua marcação, mesmo que não tenha linhas. Nesta base, você pode usar o seguinte, que funcionará no entanto, muitas linhas que você possui (e também conta para váriostbody
elementos):fonte
$('#myTable').find('tbody:last')
vez de$('#myTable > tbody:last')
.O jQuery possui um recurso interno para manipular elementos DOM em tempo real.
Você pode adicionar qualquer coisa à sua tabela assim:
A
$('<some-tag>')
coisa em jQuery é um objeto tag que pode ter váriosattr
atributos que podem ser definidos e obter, assim comotext
, o que representa o texto entre a tag aqui:<tag>text</tag>
.Este é um recuo bastante estranho, mas é mais fácil para você ver o que está acontecendo neste exemplo.
fonte
Então, as coisas mudaram desde que @Luke Bennett respondeu a essa pergunta. Aqui está uma atualização.
jQuery desde a versão 1.4 (?) detecta automaticamente se o elemento que você está tentando inserir (usando qualquer um dos
append()
,prepend()
,before()
, ouafter()
métodos) é um<tr>
e insere-o primeiro<tbody>
em sua mesa ou quebra-lo em um novo<tbody>
se ainda não existir.Portanto, sim, seu código de exemplo é aceitável e funcionará bem com o jQuery 1.4+. ;)
fonte
yourString.trim()
poderia remediar isso.E se você tivesse um
<tbody>
e um<tfoot>
?Tal como:
Em seguida, ele inseria sua nova linha no rodapé - não no corpo.
Portanto, a melhor solução é incluir uma
<tbody>
tag e usar.append
, em vez de.after
.fonte
Eu sei que você pediu um método jQuery. Procurei muito e descobri que podemos fazê-lo de uma maneira melhor do que usar JavaScript diretamente pela seguinte função.
index
é um número inteiro que especifica a posição da linha a ser inserida (começa em 0). O valor de -1 também pode ser usado; o que resulta em que a nova linha será inserida na última posição.Este parâmetro é necessário no Firefox e Opera , mas é opcional no Internet Explorer, Chrome e Safari .
Se esse parâmetro for omitido,
insertRow()
insere uma nova linha na última posição no Internet Explorer e na primeira posição no Chrome e Safari.Ele funcionará para todas as estruturas aceitáveis da tabela HTML.
O exemplo a seguir irá inserir uma linha no último (-1 é usado como índice):
Espero que ajude.
fonte
Eu recomendo
em oposição a
As palavras
first
-last
chave e funcionam na primeira ou na última tag a ser iniciada, e não fechadas. Portanto, isso funciona melhor com tabelas aninhadas, se você não quiser que a tabela aninhada seja alterada, mas adicione-a à tabela geral. Pelo menos, foi o que eu encontrei.fonte
Na minha opinião, a maneira mais rápida e clara é
aqui é demo Fiddle
Também posso recomendar uma pequena função para fazer mais alterações de html
Se você usa meu compositor de cordas, pode fazer isso como
Aqui está a demo Fiddle
fonte
tbody
você pode obter várias inserções$("SELECTOR").last()
limitar a sua colecção de tagIsso pode ser feito facilmente usando a função "last ()" do jQuery.
fonte
Estou usando dessa maneira quando não há nenhuma linha na tabela e cada linha é bastante complicada.
style.css:
xxx.html
fonte
Para a melhor solução postada aqui, se houver uma tabela aninhada na última linha, a nova linha será adicionada à tabela aninhada em vez da tabela principal. Uma solução rápida (considerando tabelas com / sem tbody e tabelas com tabelas aninhadas):
Exemplo de uso:
fonte
Eu resolvi assim.
Usando jquery
Snippet
fonte
Eu estava tendo alguns problemas relacionados, tentando inserir uma linha da tabela após a linha clicada. Tudo está bem, exceto que a chamada .after () não funciona para a última linha.
Eu cheguei com uma solução muito desarrumada:
crie a tabela da seguinte maneira (ID para cada linha):
etc ...
e depois :
fonte
Você pode usar esta excelente função jQuery add table row . Funciona muito bem com tabelas que possuem
<tbody>
e que não. Também leva em consideração o colspan da sua última linha da tabela.Aqui está um exemplo de uso:
fonte
Minha solução:
uso:
fonte
tbody
na tabela .. ?? significa que pode haver linha diretamente dentro do<table>
elemento, mesmo que sem nenhum cabeçalho.fonte
A resposta de Neil é de longe a melhor. No entanto, as coisas ficam confusas muito rápido. Minha sugestão seria usar variáveis para armazenar elementos e anexá-los à hierarquia do DOM.
HTML
JAVASCRIPT
fonte
Escreva com uma função javascript
fonte
Achei esse plugin AddRow bastante útil para gerenciar linhas de tabela. No entanto, a solução de Luke seria a melhor opção se você apenas adicionar uma nova linha.
fonte
Aqui estão alguns códigos de hackers. Eu queria manter um modelo de linha em uma página HTML . As linhas da tabela 0 ... n são renderizadas no momento da solicitação e este exemplo possui uma linha codificada e uma linha de modelo simplificada. A tabela de modelos está oculta e a tag de linha deve estar em uma tabela válida ou os navegadores podem removê-la da árvore DOM . A adição de uma linha usa o contador + 1 identificador e o valor atual é mantido no atributo de dados. Garante que cada linha obtenha parâmetros de URL exclusivos .
Executei testes no Internet Explorer 8, Internet Explorer 9, Firefox, Chrome, Opera, Nokia Lumia 800 , Nokia C7 (com Symbian 3), estoque Android e navegadores beta do Firefox.
PS: Dou todos os créditos à equipe do jQuery; eles merecem tudo. Programação JavaScript sem jQuery - nem quero pensar nesse pesadelo.
fonte
fonte
Eu acho que eu fiz no meu projeto, aqui está:
html
js
fonte
Esta é a minha solução
fonte
se você tiver outra variável, poderá acessar na
<td>
tag dessa tentativa.Dessa forma, espero que seja útil
fonte
Como eu também tenho uma maneira também adicionar linha, finalmente, ou em qualquer lugar específico, então eu acho que também devo compartilhar isso:
Primeiro descubra o comprimento ou linhas:
e use o código abaixo para adicionar sua linha:
fonte
Para adicionar um bom exemplo sobre o tópico, aqui está uma solução funcional, se você precisar adicionar uma linha em uma posição específica.
A linha extra é adicionada após a 5ª linha ou no final da tabela, se houver menos de 5 linhas.
Coloquei o conteúdo em um contêiner pronto (oculto) abaixo da tabela. Portanto, se você (ou o designer) precisar alterar, não será necessário editar o JS.
fonte
Você pode armazenar em cache a variável de rodapé e reduzir o acesso ao DOM (Observação: talvez seja melhor usar uma linha falsa em vez do rodapé).
fonte
adicionará uma nova linha à primeira
TBODY
da tabela, sem depender de nenhumaTHEAD
ou deTFOOT
presente. (Não encontrei informações de qual versão do jQuery.append()
esse comportamento está presente.)Você pode tentar estes exemplos:
Em qual exemplo a
a b
linha é inserida depois1 2
, não depois3 4
no segundo exemplo. Se a tabela estiver vazia, o jQuery criaTBODY
para uma nova linha.fonte
Se você estiver usando o plugin Datatable JQuery, poderá tentar.
Consulte API de dados datatables fnAddData
fonte
De uma maneira simples:
fonte
Tente isto: maneira muito simples
fonte