getElementsByClassName returns nothing for multiple or space-padded class names

Ouverte Adaptée aux débutants
#365 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 5 jours

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
82/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
javascript, node.js
Domaine
web-dev

Piste de recherche

L’issue pointe vers esm/mixin/parent-node.js, où getElementsByClassName transmet l’argument non découpé à classList.has. Commencez par lire cette méthode et les tests associés, puis comparez son comportement aux exigences de la spécification DOM concernant les espaces blancs ASCII et la présence de toutes les classes. Ajoutez des tests couvrant plusieurs noms de classe, l’ordre inversé et les espaces environnants ; le travail est terminé lorsque les quatre exemples renvoient chacun une correspondance.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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/

Langage dominant
HTML
Étoiles
2.1k
Forks
117
Merge moyen
4 j 13 h
PR mergées (30 j)
2

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de WebReflection/linkedom

Toutes les issues de WebReflection/linkedom

Issues similaires

Plus d'issues Web Dev

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.