getElementsByClassName returns nothing for multiple or space-padded class names

オープン 初心者向け
#365 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 5 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
82/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
javascript, node.js
領域
web-dev

調査の方向性

issue では esm/mixin/parent-node.js が示されています。ここでは getElementsByClassName が分割されていない引数を classList.has に渡しています。まずこのメソッドと関連するテストを読み、その動作を DOM 仕様の ASCII 空白とすべてのクラスに関する要件と比較してください。複数のクラス名、逆の順序、前後の空白を対象とするテストを追加してください。4 つの例すべてがそれぞれ 1 件の一致を返せば完了です。

索引モデルが issue の本文から書いたものです。

説明

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/

主要言語
HTML
スター
2.1k
フォーク
117
平均マージ
4日 13時間
マージ済み PR(30日)
2

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

WebReflection/linkedom のほかの issue

WebReflection/linkedom の issue をすべて見る

似ている issue

Web Dev の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。