- JyFxcf0X9b8rpT2
- 2063
- 5
- 0
- 0
Chrome 105で`:has()`が入ったらjQueryが壊れたという話が出てきてうわーってなっている。 github.com/w3c/csswg-draf…
2022-09-03 17:55:46引用
ところがこの「:has()」のChromeにおける実装は、jQueryで似たような機能(カッコ内の要素を持つ親要素を選択する)を提供する「:has()」に悪影響を及ぼし、このjQueryの「:has()」を使っているWebサイトでは、Chromeを利用した場合に一定の条件下でWebサイトが壊れるなどの問題を引き起こすことが分かりました
https://www.publickey1.jp/blog/22/content.html
jQueryは昔から`:has()`とか`:contains`みたいな拡張セレクタを持っている。`$()`とかで渡されるセレクタの処理はまず`querySelectorAll()`で処理して、処理できないものをjQuery側で受けるような仕組みだった。
2022-09-03 17:56:27ただネイティブの`:has()`が入ったことで状況が変わる。名前がかぶるのもあるし、`:has()`の引数はforgiving selector listという、invalidなセレクタがあっても全部が落ちないように処理するようになっている。結果拡張セレクタがjQueryに渡されなくなってしまうことに。
2022-09-03 17:57:25で、WebKitでも`:has()`の実装が入っているが、いいのか悪いのかセレクタの処理が違っていたため壊れていないらしい。ChromeもこのWebKitの挙動を導入して回避しようとしているが、それで全部解決するか……?
2022-09-03 18:01:40あー、「壊れた」だけだと言葉不足かな。jQueryを使ったコードすべてに影響はしなくて、`ul:has(li:contains('Item'))`みたいにjQueryの拡張セレクタを`:has()`内で使っていたら問題になる。
2022-09-03 18:22:13ChromeもWebKitの挙動をワークアラウンドとして実装。中に書かれたセレクタがすべて通らなかったな場合にinvalidになる。 Canaryではもう入っていて、Stableもrespinがかかったのでそれの展開待ち。105リリース直後でそのビルドさえ100%展開されてないはずだけど、この場合どうなるんだろうな。
2022-09-05 12:06:57このワークアラウンドも一部のケースにしか対応できないので、ほんと一時しのぎといった感じ。仕様での解決をしないといけないけど、どうするんだろうな……
2022-09-05 12:13:44勝手な持論だが、流石に今からjQueryを使うのは"辞めたがいい"域かもしれぬ。昔からオワコンとか言われてて可哀想だが看過できなさそう。 JSの拡張セレクタ:has()の件にしろ、jQueryの導入は中長期的にサイトを破壊する可能性もあるという、、、 publickey1.jp/blog/22/conten…
2022-10-12 17:41:46jQuery問題。安定稼働してるシステムで既に使われてる場合、改修や横展開だと工数ないのでそのまま使う。自分の場合このケースが多い。 新規サイトはWPならVanillaで書く。jQueryはWP組み込んだ時に干渉して動かないことあったので。。 生js書ける前提で選択肢としてjQuery使うならOKだと思うけどな🤔
2022-10-04 12:05:28今のいままで、jQueryを全てVannila.JS(素のJavaScript)に書き換えてて、とうとう全て書き終わりました。ちゃんと動くと脳汁が止まりません。 さようなら、すべてのjQuery #JavaScript #プログミング #シン・ジャバスクリプト
2022-10-03 00:09:03jQueryが読めることで、今後修正とかがあったときにどうすればいいか対応することが出来ます。 使われないかもしれないからやらなくていいやではなく、結局なにがしたいのかは理解する必要があります。
2022-10-03 00:12:06