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

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

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

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

jQuery

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

Q&A

解決済

2回答

2325閲覧

jqueryセレクタの正規表現抽出について

nyankou

総合スコア18

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

jQuery

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

0グッド

0クリップ

投稿2021/10/31 13:09

【やりたいこと】
「テスト」ボタンをおすと、class「abc」の行の内、「txt_sel_message」のテキストボックスに入力した文字を「data-tr」に含むtdの
色を変更させる動作となっているが、「txt_sel_message」に何も入力されていない場合はすべて該当としたい。
しかし、以下のサンプルのコードだと、val_message=''の場合はすべて非該当となってしまう(すべて該当になると思っていました)。

【サンプル】
<input type = "button" name="test" value="テスト" id = "test"/>
<input style="width:100%; box-sizing:border-box" class="input_change" name="txt_sel_message" />

<table> <tr class = "abc"><td data-tr='xyz'>1</td></tr> <tr class = "abc"><td data-tr='hrq'>2</td></tr> <tr class = "abc"><td data-tr='opq'>3</td></tr> <tr class = "abc"><td data-tr='xyx'>4</td></tr> <tr class = "abc"><td data-tr='xyy'>5</td></tr> </table> <script> $("#test").on("click", function() { val_message = $("input[name='txt_sel_message']").val(); $(".abc").find("[data-tr *= '"+val_message+"']").css('background-color', 'lightcoral'); }); </script>

【確認したいこと】
・「txt_sel_message」が未入力の場合は、val_message=''となると思いますが、find("[data-tr *= '"+val_message+"']")と組み合わせると
「制限する文字がない」→すべて該当 という図式にはならないのでしょうか。(すべて非該当となってしまうのはなぜでしょうか)
・「txt_sel_message」が未入力の場合は、全てを該当とする方法はありませんでしょうか。

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

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

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

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

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

guest

回答2

0

残念ながら、[data-xx*=""]ヒットしないという仕様になっています。

If "val" is the empty string then the selector does not represent anything.(W3C

「txt_sel_message」が未入力の場合は、全てを該当とする方法はありませんでしょうか。

空文字列の場合だけ条件分岐して別処理させるしかないです。

投稿2021/10/31 13:39

maisumakun

総合スコア146018

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

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

nyankou

2021/11/01 03:50

ご回答ありがとうございました。 そのような仕様になっているのですね。 ネットで探しても明記されていなかった為、すっきりしました。 ちなみに、find("[data-tr *= '"+val_message+"']") で、全てをヒットさせたい場合には、val_messageに設定する適切な表現はあるのでしょうか。 それとも 条件分岐でfind("[data-tr *= '"+val_message+"']")を実行しないという方法しかないのでしょうか。
maisumakun

2021/11/01 03:59

> それとも条件分岐でfind("[data-tr *= '"+val_message+"']")を実行しないという方法しかないのでしょうか。 そのとおりです。
nyankou

2021/11/02 03:58

承知しました。 ご回答ありがとうございました。
guest

0

ベストアンサー

javascript

1<script> 2$(function(){ 3 $("#test").on("click", function() { 4 var v= $("input[name='txt_sel_message']").val(); 5 $(".abc [data-tr]") 6 .css('background-color','') 7 .filter(v?"[data-tr *= '"+v+"']":"*") 8 .css('background-color', 'lightcoral'); 9 }); 10}); 11</script> 12<input name="txt_sel_message"> 13<input type = "button" name="test" value="テスト" id = "test"> 14<table> 15<tr class = "abc"><td data-tr='xyz'>1</td></tr> 16<tr class = "abc"><td data-tr='hrq'>2</td></tr> 17<tr class = "abc"><td data-tr='opq'>3</td></tr> 18<tr class = "abc"><td data-tr='xyx'>4</td></tr> 19<tr class = "abc"><td data-tr='xyy'>5</td></tr> 20</table>

投稿2021/11/01 01:21

yambejp

総合スコア116724

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

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

nyankou

2021/11/01 03:55

ご回答ありがとうございました。 ?を使用する構文は初めてで、調べてみようと思います。
nyankou

2021/11/02 03:57

サンプルまで付けていただきありがとうございます。 今回提示した例だと[data-tr *= '"+v+"']のみなのですが、[data-tr10 *= '"+f+"'](fには別テキストボックスの内容を設定)もand条件として組み込みたいと考えています。 filter((v?"[data-tr *= '"+v+"']":"*")&&(f?"[data-tr10 *= '"+f+"']":"*")) とやってみたのですが後者の(f?"[data-tr10 *= '"+f+"']":"*")しか 反映されないようでした。filterの中に三項演算子を使用して複数条件を設定することはできないのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問