R42日記スマートフォン用の表示で見るR42日記この日記は私的なものであり所属会社の見解とは無関係です。takahashikznITmediaに寄稿しました。JavascriptjQueryのセレクタ文法は簡単に拡張できます。え?知らない?ココを参照すべし。});})(jQuery);「全ての親要素がXXXを満たす」という擬似クラスを追加しています。.c:all-parents(:not(.a))と指定することで、OKを含むspanだけを選択できるようになるわけです。本題さて、親を取得するセレクタを実装できないか調べてみました。.aこれは、クラスcを持つ要素の親で、クラスaを持つものを指します。前述のものとの決定的な違いは、これはフィルタではなくコンビネータ*1だということです。従って、上記のように擬似クラスでは実現できず、コンビネータの定義を追加する必要があります。jQuery(というかSizzle)の実装を見てみる言うまでもありませんが、jQueryのセレクタ実装の実体はSizzleです。みんな知っ(略)ちなみに、jQueryのバージョン2.1.0での話。ここで、コンビネータのトークンが宣言されています。}});とすればよいはずです。ここまでは良いのですが、追加した"<"コンビネータに対して振る舞いを追加する方法がわかりません。...(略)に辿り着きます。tokensという引数がセレクタ文字列のパース結果のようです。tokensは何処で作られているのかというと、1981行目のtokenizeという関数がその責務を負っているようです。)とあるので、正規表現を用いてコンビネータをパースしていることがわかります。...(略)\(^o^)/オワタ見ての通りrcombinatorは不可視なところで宣言されているため、どうにもなりませぬ。.aと言われて先に進めないままです。...というわけで、コンビネータを追加するにはjQueryのソースを書き換えるしか無いと思います。*1:CSSのコンビネータです。instrument"になる件lambda-factoryをOpenJ9で動かすおまじない月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。