何をしたい
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 });
console.log("result2"+result2) の結果を追記していただくことは可能でしょうか。
ありがとうございます。各console.logの出力は下記となります。
■リンゴのeachの結果
txt1:りんご
result:0
result2:りんご
result3:-1
※少々見やすくするために「:」を追加しました。
ありがとうございます。文字列と結合せず、console.log(result2); にすると、意外な結果にならないでしょうか。
console.log(result2)
にした結果は下記です。
["りんご", index: 0, input: "りんご", groups: undefined]
⇒「result2 = txt1.match(matchtxt);」は文字列を返しているわけではないといことでしょうか
matchメソッドは、文字列ではなく、該当文字列に対しての、引数の正規表現によって得られる文字列配列を返します。
回答2件
あなたの回答
tips
プレビュー