getElementsByClassName returns nothing for multiple or space-padded class names

Abierto Apto para principiantes
#365 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 5 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
82/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
javascript, node.js
Área
web-dev

Línea de trabajo

El issue señala esm/mixin/parent-node.js, donde getElementsByClassName pasa el argumento sin dividir a classList.has. Empieza por leer ese método y las pruebas relacionadas; luego compara su comportamiento con los requisitos de espacios en blanco ASCII y de todas las clases de la especificación DOM. Añade cobertura para varios nombres de clase, el orden inverso y los espacios alrededor; el trabajo estará terminado cuando los cuatro ejemplos devuelvan una coincidencia cada uno.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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/

Lenguaje dominante
HTML
Estrellas
2.1k
Forks
117
Merge medio
4 d 13 h
PR fusionados (30 d)
2

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de WebReflection/linkedom

Todos los issues de WebReflection/linkedom

Issues similares

Más issues de Web Dev

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.