質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

1165閲覧

セレクタの桁数まで指定した条件一致を行いたい(jquery)

nyankou

総合スコア18

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

1グッド

2クリップ

投稿2021/10/19 15:03

例として、

<li class="aabb123">aa</li> <li class="ddbb125">bb</li> <li class="cabb323">cc</li> があったとします(いずれもclassは7桁固定)。

上記3つもオブジェクトの内、「ワイルドカードを含む変数[ab**2](7桁固定)」と合致するclassを求める場合はどのようにやればよいでしょうか。
今回の場合は

<li class="aabb123">aa</li> <li class="cabb323">cc</li> が該当になります。 前方一致、後方一致、部分一致はできると思うのですが、例のように左から2桁目がa、3桁目がb、6桁目が2のように 桁数まで指定した比較は難しいのでしょうか。
退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

質問のタグに jQuery があるし、質問のタイトルにも

セレクタの桁数まで指定した条件一致を行いたい(jquery)

ってあるから jQuery使っていいんであれば

javascript

1$('li').filter( 2 (_, e) => e.className.match(/\b\wab\w{2}2\w\b/) 3);

とかで。

ちなみに、/\b\wab\w{2}2\w\b/ は、liが検索対象の7桁固定のCSSクラス以外のクラスを持っていてもOK

たとえば、HTMLが

html

1<li class="_x aabb123 _y1">aa</li> 2<li class="ddbb125 _x">bb</li> 3<li class="_x cabb323">cc</li>

だったりしても、aabb123 を持つli と、 cabb323 を持つ li の2つを取れる。
???? 動作確認用CodePen

投稿2021/10/19 15:48

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyankou

2021/10/20 04:00

ご回答ありがとうございます。 アロー関数を使用したことがなかったため調べてみたのですが、内容を理解できていない部分がある状況です。 (_, e) => e.className.match(/\b\wab\w{2}2\w\b/) の部分の eはイベントのことでe.classNameで使用されていると思われるのですが、_はどこかで使用されているのでしょうか。よろしければ_の意味合いも教えていただけると幸いです。
退会済みユーザー

退会済みユーザー

2021/10/20 04:55

コメントありがとうございます。 > (_, e) => e.className.match(/\b\wab\w{2}2\w\b/) > の部分の eはイベントのこと ではないです。jQuery の .filter() の説明: https://api.jquery.com/filter/ の中で、filter の引数に 関数を渡す場合の説明に .filter( function ) Type: Function( Integer index, Element element ) => Boolean A function used as a test for each element in the set. this is the current DOM element. とあり、ここにあるとおりfilter に渡す関数の引数の意味は以下 第1引数: index 第2引数: element です。 回答に書いたコードの > (_, e) => ・・・ の e は、この element の頭文字を意図しています。 次に、回答に書いたコードでは第一引数を _ にしていますが > _はどこかで使用されているのでしょうか。 とおしゃるとおり、使わない変数です。このような場合の慣例として、使わない変数を _ だったり、_ を頭につけた、たとえば _index だったりにします。 参考までに以下はstackoverflowの回答ですが、 https://stackoverflow.com/a/32198002 同じく jQuery の $.each を使ったときに、上記と同様に index を使わないときに、_ にしておくというという趣旨を説明するものです。
nyankou

2021/10/21 03:36

ご丁寧に解説していただきありがとうございます。 興味がありましたので早速使ってみようと思い、簡単にSTATUSというクラスを複数作り、testボタンを押下すると背景色を黄色くするコードを書いたのですが、うまく動作しません。 $("#test").on("click", function() { $('.STATUS').filter( (_, e) = > e.className.match(^.*STATUS.*) ).css('background-color', 'yellow'); }); 根本的になにか文法が間違っておりますでしょうか。 度々の質問で大変申し訳ありません。
退会済みユーザー

退会済みユーザー

2021/10/21 08:44

なるほどですね。うまく動作しないんですね。 > 根本的になにか文法が間違っておりますでしょうか。 とのことですが、お手数なのですが、 その > 簡単にSTATUSというクラスを複数作り、 との、HTMLのほうも挙げていただけますでしょうか。
nyankou

2021/10/21 15:33

お返事ありがとうございます。 以下のtableを作成しました。     <input type = "button" name="test" value="テスト" id = "test" /> <table> <tr class = "STATUS"><th>a</th></tr> <tr class = "STATUS"><td>b</td></tr> <tr class = "STATUS"><td>c</td></tr> <tr class = "STATUS"><td>d</td></tr> <tr class = "STATUS"><td>e</td></tr> </table>
nyankou

2021/10/21 15:35

$("#test").on("click", function() { $('.STATUS').css('background-color', 'yellow'); }); は動作し対象classの背景が黄色くなるのですが、 $("#test").on("click", function() { $('.STATUS').filter( (_, e) = > e.className.match( ^ . * STATUS. * ) ).css('background-color', 'yellow'); }); だと動作しない状況です。
退会済みユーザー

退会済みユーザー

2021/10/21 16:56

HTMLのご提示ありがとうございます。 拝読したところ、以下の行 > (_, e) = > e.className.match( ^ . * STATUS. * ) の、match メソッドの引数として与えている ^ . * STATUS. * が正しくないです。match メソッドの引数には、 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/match#%E6%A7%8B%E6%96%87 で説明されているとおり、正規表現オブジェクトを与える必要がありますが、 正規表現オブジェクトをどのようにして作るかというと、以下 https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions#creating_a_regular_expression で説明されているように、 /ab+c/ だったり new RegExp('ab+c') と書くことによって作成されます。 また、正規表現自体は、JavaScript に固有のものではありませんので、JavaScriptによるプログラミングとは別のものとして習得する学習アイテムです。 「正規表現 入門」でググれば、様々な記事が該当しますので、いくつか目を通してみて、分かりやすそうなものを読んでみるとよいかと思います。
nyankou

2021/10/24 14:34

返信が遅くなり申し訳ありませんでした。 ご丁寧な解説、ありがとうございました。 ご指摘の通り正規表現の記載が誤っていたようです。 修正したところ、期待する動作になりました。 重ね重ね、御礼申し上げます。
nyankou

2021/10/25 14:29

質問を閉じた後に申し訳ありません。 今回class名での比較だったためe.className.matchを使用できたのですが、カスタムデータ属性でも className.matchのような正規表現での比較をすることのできる関数はあるものでしょうか。
nyankou

2021/10/27 03:58

早々にご回答いただきありがとうございました。 これでやりたいことができそうです。 大変ありがとうございました。
guest

0

CSSセレクタだけでは不可能です。
JavaScriptコードで正規表現など使って絞るしかないでしょう。

jQueryのセレクタはCSSセレクタの拡張ですが、やはり不可能です。

コードの雰囲気:

js

1let list = [...document.querySelectorAll('li')].filter( 2 li => [...li.classList].some(cl => cl.match(ここに正規表現)));

投稿2021/10/19 15:07

編集2021/10/19 15:59
int32_t

総合スコア21695

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyankou

2021/10/20 04:04

ご回答ありがとうございます。 また、サンプルの提示についてもありがとうございました。 やはりセレクタだけでは不可能なのですね。 javascriptではやってみたのですが、jquery等使用してもう少し効率的なやり方は無いものかと思い 投稿させていただきました。 言葉足らずで申し訳ありませんでした。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問