前回までのあらすじ
ブラウザで :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 の挙動も戻りそう?)