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

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

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

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

Q&A

解決済

2回答

292閲覧

部分一致判別について

kerofu1977

総合スコア11

jQuery

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

0グッド

0クリップ

投稿2019/04/23 12:50

何をしたい

htmlに記載されたテキストをスクリプト側で判別しクラスを追加したい。
配列keywordとhtmlのテキストを比較し、イコールの場合、active1~3までのクラスを追加したいのですが、
完全一致である「りんご」「みかん」は「active1、active2」が当たるのですが、部分一致である
「冬みかん」「夏みかん」「紅鮭」はあたりません。
result2でmatchで部分一致させているつもりなのですが、result3で比較すると-1が帰ってきています。
部分一致のやり方がちがうのでしょうか?

htmlコード

html

1<div class="box"> 2<p class="txt">りんご</p> 3</div> 4 5<div class="box"> 6<p class="txt">冬みかん</p> 7</div> 8 9<div class="box"> 10<p class="txt">みかん</p> 11</div> 12 13<div class="box"> 14<p class="txt">夏みかん</p> 15</div> 16 17<div class="box"> 18<p class="txt">紅鮭</p> 19</div>

script

1$(function() { 2 var c = ['active1','active2','active3'] 3 var keyword = ['りんご','みかん','鮭'] 4 var matchtxt = keyword.join('|'); 5 6 $('.txt').each(function() { 7 var txt1 = $(this).text(); 8 console.log("txt1:"+ txt1) 9 10 var result = $.inArray(txt1, keyword); 11 var result2 = txt1.match(matchtxt); 12 var result3 = $.inArray(result2, keyword); 13 14 console.log("result"+result) 15 console.log("result2"+result2) 16 console.log("result3"+result3) 17 18 if(result > -1){ 19 $(this).attr('class',c[result]);; 20 } 21 }); 22 23 });

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

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

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

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

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

iwamot

2019/04/23 13:40

console.log("result2"+result2) の結果を追記していただくことは可能でしょうか。
kerofu1977

2019/04/23 13:46

ありがとうございます。各console.logの出力は下記となります。 ■リンゴのeachの結果 txt1:りんご result:0 result2:りんご result3:-1 ※少々見やすくするために「:」を追加しました。
iwamot

2019/04/23 13:50

ありがとうございます。文字列と結合せず、console.log(result2); にすると、意外な結果にならないでしょうか。
kerofu1977

2019/04/23 13:56

console.log(result2) にした結果は下記です。 ["りんご", index: 0, input: "りんご", groups: undefined] ⇒「result2 = txt1.match(matchtxt);」は文字列を返しているわけではないといことでしょうか
miyabi_takatsuk

2019/04/24 01:51

matchメソッドは、文字列ではなく、該当文字列に対しての、引数の正規表現によって得られる文字列配列を返します。
guest

回答2

0

ベストアンサー

こんな感じ?

javascript

1<style> 2.active1{color:red;} 3.active2{font-weight:bold;} 4.active3{background-Color:yellow;} 5</style> 6<script> 7$(function() { 8 var c = ['active1','active2','active3']; 9 var keyword = ['りんご','みかん','鮭']; 10 $.each(keyword,function(x,y){ 11 $('.txt').filter(function(){ 12 return $(this).text().match(new RegExp(y)); 13 }).addClass(c[x]); 14 }); 15}); 16</script> 17<div class="box"> 18<p class="txt">りんご</p> 19</div> 20 21<div class="box"> 22<p class="txt">冬みかん</p> 23</div> 24 25<div class="box"> 26<p class="txt">みかん</p> 27</div> 28 29<div class="box"> 30<p class="txt">夏みかん</p> 31</div> 32 33<div class="box"> 34<p class="txt">紅鮭</p> 35</div> 36 37<div class="box"> 38<p class="txt">hogeりんご鮭みかんfuga</p> 39</div>

投稿2019/04/24 03:07

yambejp

総合スコア114843

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

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

kerofu1977

2019/04/24 11:54

いただいたコードでテストしたところ、部分一致ができました。 ベストアンサーとさせていただきます。 ありがとうございました!
guest

0

お気づきの通り、String.prototype.match() の戻り値はnullか配列です。下記が参考になると思います。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/match

というわけで、マッチしたかどうかは戻り値を見て判断できるはずです。

投稿2019/04/23 14:00

iwamot

総合スコア1154

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

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

kerofu1977

2019/04/24 11:53

ご丁寧な説明ありがとうございます。 var result3 = $.inArray(result2[0], keyword); に変更し、 if(result3 > -1){ $(this).attr('class',c[result3]);; } としたところ、項目が増えた場合にうまく判別ができないため、一旦クローズとさせていただきます。 jQuery.Deferred exception: Cannot read property '0' of null TypeError: Cannot read property '0' of null
iwamot

2019/04/24 11:57

result2 が null ならマッチしていない、配列ならマッチしているということなんです。result3 は不要です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問