jQuery / Método / jQuery.trim() - Remover espaços das extremidades

jQuery.trim() removia espaços do começo e do fim de uma string, mantendo os internos. Obsoleto desde o jQuery 3.5 e removido no 4.0, deve ser substituído em código novo por text.trim(). Na migração, revise entradas não textuais como null, undefined e números.

Conferir versão e alcance da remoção

A API jQuery.trim() e o guia de migração do jQuery 4 registram a remoção. O erro $.trim is not a function no jQuery 4 pode vir dessa mudança. Era uma utilidade global $.trim(text) ou jQuery.trim(text), não um método de elementos selecionados.

Aspecto Antigo $.trim(text) Nativo text.trim()
Disponibilidade Obsoleto 3.5, removido 4.0 Método JavaScript de strings
Alcance Espaços das duas extremidades Espaços das duas extremidades
Espaços internos Preservados Preservados
Original Devolve string resultante Devolve sem alterar o original
Outros tipos Revisar comportamento antigo de null etc. Verificar tipo/conversão antes de value.trim()

String.prototype.trim() devolve nova string sem espaços e terminadores de linha nas pontas. Não reduz espaços internos nem remove todos. Inclui tabulações, quebras e espaços inseparáveis NBSP, mas nem todo caractere invisível é espaço.

Exemplo completo de espaços externos e internos

Salve todo o código em UTF-8 como trim-demo.html e abra no navegador. A interface carrega o arquivo oficial do jQuery 4.0.0 pela rede de distribuição de conteúdo, CDN, exigindo internet e sem instalação. O .trim() da string não precisa de jQuery.

O exemplo usa trim nativo e só compara o resultado antigo se $.trim existir. Foi executado sem jQuery Migrate com 3.7.1 e 4.0.0, confirmando presença no primeiro e ausência no segundo. Espaços, Unicode, aplicação ao campo e conversões abaixo também foram verificados.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Migrate from jQuery trim</title>
  <script src="https://code.jquery.com/jquery-4.0.0.min.js"></script>
  <style>
    body { font: 16px/1.6 sans-serif; max-width: 760px; margin: 24px auto; padding: 16px; }
    button, select, textarea { font: inherit; margin: 4px; max-width: 100%; }
    textarea { display: block; width: 90%; min-height: 90px; }
    pre { white-space: pre-wrap; overflow-wrap: anywhere; }
  </style>
</head>
<body>
  <h1>Trim only the edges of a string</h1>
  <label for="sample">Sample:</label>
  <select id="sample"><option value="spaces">Edge and internal spaces</option><option value="lines">Tabs and line breaks</option><option value="nbsp">Non-breaking spaces</option><option value="zero">Zero-width spaces</option><option value="empty">Empty string</option></select>
  <label for="value">Value:</label>
  <textarea id="value"></textarea>
  <button type="button" id="preview">Preview trim</button>
  <button type="button" id="apply">Apply to field</button>
  <button type="button" id="reset">Reset</button>
  <pre id="result" aria-live="polite"></pre>
  <pre id="legacy"></pre>
  <script>
    $(function () {
      const samples = {
        spaces: "  Alpha  Beta  ",
        lines: "\t\nAlpha  Beta\n ",
        nbsp: "\u00a0Alpha\u00a0",
        zero: "\u200bAlpha\u200b",
        empty: ""
      };
      function preview() {
        const before = $("#value").val();
        const after = before.trim();
        $("#result").text(`before=${JSON.stringify(before)}\nafter=${JSON.stringify(after)}\nlength=${before.length} -> ${after.length}`);
        $("#legacy").text(typeof $.trim === "function"
          ? `Legacy result: ${JSON.stringify($.trim(before))}`
          : "jQuery.trim is unavailable; native trim is used");
      }
      function loadSample() { $("#value").val(samples[$("#sample").val()]); preview(); }
      $("#sample").on("change", loadSample);
      $("#preview").on("click", preview);
      $("#apply").on("click", function () { $("#value").val($("#value").val().trim()); preview(); });
      $("#reset").on("click", function () { $("#sample").val("spaces"); loadSample(); });
      loadSample();
    });
  </script>
</body>
</html>

Inicialmente somem apenas quatro espaços externos; os dois internos ficam:

before="  Alpha  Beta  "
after="Alpha  Beta"
length=15 -> 11
  1. Preview trim mostra o resultado sem alterar os espaços do campo.
  2. Apply to field escreve explicitamente com .val() e muda o campo.
  3. Tabs and line breaks remove tabulações/quebras externas e preserva dois espaços entre Alpha e Beta.
  4. Non-breaking spaces remove U+00A0, reduzindo comprimento de 7 para 5.
  5. Zero-width spaces mantém U+200B e comprimento 7 porque não é removido.
  6. Empty string devolve vazio. Reset restaura amostra e campo iniciais.

Definir política para null, undefined e 0

O antigo $.trim() podia converter null/undefined em vazio e 0/false em "0"/"false". Trocar diretamente por null.trim(), undefined.trim() ou .trim() de um número não equivale. Se o contrato exige strings, verifique o tipo e trate entradas incorretas antes.

Se a política for vazio para null/undefined e strings para os demais valores primitivos, converta explicitamente como abaixo. Execute este trecho completo no Console das ferramentas de desenvolvimento. Ele não garante compatibilidade universal com objetos arbitrários.

function trimNullable(value) {
  return String(value ?? "").trim();
}
console.log(`null=${JSON.stringify(trimNullable(null))}`);
console.log(`undefined=${JSON.stringify(trimNullable(undefined))}`);
console.log(`zero=${JSON.stringify(trimNullable(0))}`);
console.log(`false=${JSON.stringify(trimNullable(false))}`);
console.log(`NBSP=${JSON.stringify("\u00a0A\u00a0".trim())}`);
console.log(`zero-width length=${"\u200bA\u200b".trim().length}`);
null=""
undefined=""
zero="0"
false="false"
NBSP="A"
zero-width length=3

?? só aplica vazio a null/undefined, preservando 0 e false. value || "" também pode descartá-los. String(null).trim() produz "null", não vazio. Se ausência e string vazia precisam ser diferentes, valide antes da conversão.

Separar limpeza de espaços e validação

Uma string só de espaços fica vazia. Isso pode servir a buscas e nomes comuns, mas não a todo valor com espaços externos significativos. Defina as regras do campo antes de alterar a entrada.

trim não remove tags HTML, altera maiúsculas, normaliza espaços internos nem faz validação de segurança. O exemplo mostra entradas semelhantes a HTML literalmente com .text(). Para caracteres invisíveis restantes, examine pontos de código e a normalização necessária.

Se o erro persistir, confira versão real, chamadas $.trim restantes, plugins e tipos de entrada. Após substituir, teste null, undefined, 0, vazio, apenas espaços e casos reais. Ajustar chamadas e regras conforme o guia de migração facilita a manutenção em vez de reduzir a versão da biblioteca.