getElementsByClassName returns nothing for multiple or space-padded class names

Fechada Para iniciantes
#365 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 5 dias

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
82/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
javascript, node.js
Domínio
web-dev

Direção de pesquisa

O issue aponta para esm/mixin/parent-node.js, onde getElementsByClassName passa o argumento sem divisão para classList.has. Comece lendo esse método e os testes relacionados; em seguida, compare o comportamento com os requisitos da especificação DOM sobre espaços em branco ASCII e a presença de todas as classes. Adicione cobertura para vários nomes de classe, ordem invertida e espaços ao redor; o trabalho estará concluído quando os quatro exemplos retornarem uma correspondência cada.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

getElementsByClassName matches the whole argument as a single class, so "a b", "b a" or " a " find nothing.

const { parseHTML } = require("linkedom");
const { document } = parseHTML('<!doctype html><html><body><p class="a b">x</p></body></html>');

console.log(
  document.getElementsByClassName("a").length,
  document.getElementsByClassName("a b").length,
  document.getElementsByClassName("b a").length,
  document.getElementsByClassName("  a ").length
);

node t.js

Expected: 1 1 1 1

Actual: 1 0 0 0

Tested with linkedom 0.18.15 from npm and main at 6e2ae0c, Node.js 26.13.0.

The DOM spec splits the argument on ASCII whitespace and requires all classes (https://dom.spec.whatwg.org/#concept-getelementsbyclassname). getElementsByClassName in esm/mixin/parent-node.js calls classList.has(className) with the unsplit string.

Credit: https://ucsbplse.github.io/

Linguagem predominante
HTML
Estrelas
2.1k
Forks
117
Merge médio
4d 13h
PRs com merge (30d)
2

Preparar o ambiente

Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de WebReflection/linkedom

Todas as issues de WebReflection/linkedom

Issues semelhantes

Mais issues de Web Dev

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.