前回までのあらすじ
ブラウザで :has()
を実装した結果、 :querySelectorAll()
で :has()
を扱えるようになり、 jQuery で :has()
を使ったときの挙動が変わってしまっていた。
その後
結局、 :is
:where
以外のセレクタ (含む :has()
) を unforgiving にすることが決まっていた。 :is
:where
だけは forgiving なままとするので、 :has(:is(ほげほげ))
と書くと forgiving な使い方にすることもできる、という態度っぽい (pull request のテストケースで言うと、 :has(:is(.a, 123))
は (123
が invalid なセレクタなので) :has(:is(.a))
として扱われる)。
- CSS Working Group で議論して決まったらしい https://github.com/w3c/csswg-drafts/issues/7676#issuecomment-1341347244
- issue から言及されてる変更はこのあたりっぽい?
Chrome を見ると、 Make :has() unforgiving (Ibb499e25) · Gerrit Code Review とかで実装もマージされていそうに見える。 Chrome のリリースまでの流れに詳しくないけど、近いバージョンで出てきそう? (そのタイミングで jQuery の挙動も戻りそう?)