Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ao tentar criar uma funcionalidade onde usuários possam editar o conteúdo de células específicas de uma tabela HTML apenas com um duplo clique, surge a questão de como fazer essa edição de forma intuitiva e eficiente, sem a necessidade de recarregar a página ou usar banco de dados. A solução ideal deve permitir uma edição inline, com feedback imediato, e garantir que as alterações persistam localmente na estrutura do arquivo HTML, sem dependências externas.
Para capturar o evento de duplo clique, o método mais comum é usar o evento 'dblclick'. No entanto, há uma consideração importante: ao aplicar o listener em elementos dinâmicos ou em um elemento pai que contém várias células, o uso de event delegation é preferível. Assim, podemos colocar um listener em um elemento pai, como o tbody, e verificar se o alvo do evento foi uma célula com a classe específica. A decisão fica mais saudável quando o time consegue medir o impacto depois.
// Exemplo de delegação para detectar double click em células específicas
tbody.addEventListener('dblclick', (e) => {
if (e.target.tagName === 'TD' && e.target.classList.contains('changeable')) {
// lógica de edição
}
}).
Dessa forma, qualquer célula marcada como 'changeable' pode disparar a edição inline.
Ao detectar o duplo clique, substituímos o conteúdo da célula por uma textarea, para que o usuário possa editar o texto livremente. É importante guardar o valor original para eventuais rollback. Após a edição, podemos usar eventos como 'focusout' ou uma tecla específica (como Enter) para finalizar a edição.
// Dentro do evento dblclick
const td = e.target. const valorOriginal = td.textContent. const textarea = document.createElement('textarea'). textarea.value = valorOriginal. // Limpa o conteúdo da célula e insere a textarea
td.innerHTML = ''. td.appendChild(textarea). // Dá foco para o textarea
textarea.focus(). // Evento para finalizar a edição
textarea.addEventListener('focusout', () => {
// Atualiza o conteúdo com o valor editado
td.textContent = textarea.value. // Opcional: salvar no localStorage
salvarAlteracoes(). }). Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Para garantir que as alterações não se percam ao atualizar a página, podemos usar o localStorage. Sempre que uma célula for editada, atualizamos uma estrutura de dados local e sincronizamos com o armazenamento.
function salvarAlteracoes() {
const linhas = document.querySelectorAll('tbody tr'). const dados = {}. linhas.forEach(linha => {
const celulas = linha.querySelectorAll('td.changeable'). celulas.forEach((celula, idx) => {
const chave = linha.querySelector('th') ? linha.querySelector('th').textContent : 'linha'. if (!dados[chave]) dados[chave] = {}. dados[chave][idx] = celula.textContent. }). }). localStorage.setItem('tabelaDados', JSON.stringify(dados)). } Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
// Ao carregar a página, reconstruir os dados
function carregarDados() {
const dadosStr = localStorage.getItem('tabelaDados'). if (!dadosStr) return. const dados = JSON.parse(dadosStr). // lógica para aplicar os dados às células
} O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
A combinação de event delegation, edição inline com textarea e armazenamento local é uma solução prática para edições rápidas e temporárias de tabelas HTML. Essa abordagem, embora simples, pode ser expandida para incluir funcionalidades como validações, exportação de dados ou integração com APIs externas. Para cenários mais complexos, o uso de frameworks ou bibliotecas específicas pode facilitar a manutenção e escalabilidade do projeto. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Ao aplicar essa estratégia, a chave está na gestão eficiente do estado local e na manipulação cuidadosa do DOM para evitar comportamentos inesperados, especialmente em tabelas complexas ou com grande volume de dados. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Carregando comentários...