jQueryの条件分岐を高速化!switch文を使って複雑な処理を作成する方法とは?

このQ&Aのポイント
  • jQueryの処理を高速にするため、スクリプトを見直しています。HTML側に設定された変数の値に応じて、bodyに異なるclassを追加したいと思っています。現在はif文を使用していますが、switch文を使ったほうが早く処理できるのではないかと考えています。ただし、変数の値が一部分しかマッチしないため、switch文のcaseに適切な値を指定することができません。そこで、他の方法で処理を高速化する方法を教えていただきたいです。
  • 現在、jQueryの処理を高速化するために、スクリプトを見直しています。HTMLに設定されている変数の値によって、bodyに異なるclassを追加したいと考えています。ただし、変数の値は一部分しかマッチしないため、switch文のcaseに適切な値を指定することができません。そこで、if文以外の方法で処理を高速化する方法を教えていただきたいです。なお、条件分岐の数は10ページ近くあります。
  • jQueryの処理を高速化するために、スクリプトの見直しを行っています。HTMLに設定された変数の値によって、bodyに異なるclassを追加する必要がありますが、変数の値は一部分しかマッチしないため、switch文のcaseに適切な値を指定することができません。そこで、if文以外の方法で処理を高速化する方法を知りたいです。条件分岐の数は10ページ近くあるため、if文ではスマートではないと感じています。アドバイスをお願いします。
回答を見る
  • ベストアンサー

jQuery 複雑なswitch文を作りたい

jQueryの処理を高速にするため、スクリプトを現在、見直しています。 すみませんが、またまた質問させてください。 HTML側にふられている変数(var page;)の値を取得し その変数によって、bodyに別々のclassを追加したいと思っています。 HTMLは数ページあり、それぞれ異なる値です。 $(function(){ if(page.indexOf("あああ")!=-1){ $("body").addClass("aaa"); }else if(page.indexOf("かかか")!=-1){ $("body").addClass("kkk"); }else if(page.indexOf("さささ")!=-1){ $("body").addClass("sss"); } }); 上記のようにやっているのですが、 if文より、switch文でやったら早いかなぁと思いいろいろ試しています。 ですが、indexOfで取得しているように、var pageで取得したい文字は一部分なのです。 ↓こんな感じです。 var page = "あああいいい"; var page = "かかかききき"; var page = "さささししし"; なので、switch文のcaseに置く定数式に、ぴったり当てはまる文字列ではないのです。 以下の例は3つの条件ですが、 実際は10ページ近くあるので、それをすべてif文で書くのはスマートでない気がします。 そもそも、こういった場合はif文を使うしかないのでしょうか? switch文でなくても、他のやり方でも、 何か早く処理できる方法がありましたら教えてください。 宜しくお願いいたします。

  • AJAX
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

page.match(/あああ|かかか|さささ/)

mc0816
質問者

お礼

ありがとうございます。 なるほど~ match()を使うんですね。 matchをあまり使いこなせていないので もっと勉強したいと思います。 参考になりました。 ありがとうございました。

関連するQ&A

  • switch()文で値の大小比較

    例えば$numという変数の値が50以下の場合、 51以上80以下の場合、81以上の場合の処理と分けたい場合、 switch()文でif()のように値の大小比較をする事は出来ないのでしょうか? 以下のような比較を行いたいです。 (以下は例なので、if()で良いだろうという突っ込みは要りません) switch ($num) { case <= 50: 処理1 case <= 80: 処理2 default: 処理3 }

    • ベストアンサー
    • PHP
  • JavaScript→HTMLへ値渡しする方法

    お世話になります。 JSPファイル内のJavaScriptで調べた値を、 同じJSPファイル内のHTMLへ値を渡して、 その値をHTML内のIF文で判断して、 HTMLの表示画面内容を、 大まかには、以下のサンプルソースのような流れで 変更したいです。 <script language="JavaScript" type="text/javascript"> <!-- function getInfoAgentUser(){ var agent_user = navigator.userAgent.toLowerCase(); var WinOs = agent_user.indexOf("win") != -1; // 文字列に、"win"が含まれているケース var Msie = agent_user.indexOf("msie") != -1; // 文字列に、"msie"が含まれているケース var errFlg = ""; if(WinOs){ if(Msie){ errFlg = "0"; }else{ errFlg = "1"; } }else{ errFlg = "2"; } } //--> </script> </head> <body onLoad="getInfoAgentUser()"> <c:if test="${errFlg == 1}"> <h1>ブラウザエラー</h1> <div class="main"> <p><c:out value="Internet Explorerを利用してください" /></p> </div> </c:if> <c:if test="${errFlg == 2}"> <h1>OSエラー</h1> <div class="main"> <p><c:out value="Windows XP以上を利用してください" /></p> </div> </c:if> 上記のサンプルソース内の、 JavaScript内のIF文で判断した「errFlg」変数の値を、 <body ~以下で、 <c:if test="${errFlg == 1}"> みたいに判断し分岐して、 HTMLの表示画面内容を 変更したいです。 どのようにすれば、上記の「errFlg」変数の値を JavaScript→HTMLへ値渡し出来るのでしょうか? 以上になります。 ご存じの方がいらっしゃいましたら教えてください。 宜しくお願いします。

  • スイッチ文の利用について

    Perl/CGIにてプログラミングを行っております。 ただいま条件分けにより処理を分けていく処理を作っているのですが、C言語でやったスイッチ文があれば便利だなと思っております。 しかし、Perlにはスイッチ文が無いようなのです。 手持ちの参考書を見ても載っておらず、諦めようかと思いましたが大量にならぶifとelsifをみてやはり思い直しました。 スイッチ文、もしくはそれに近いものってありますでしょうか? 理想としてはC言語のままの switch(式or変数){ case hoge: ... case hoge2: ... } のような形式を望んでおります。 何か有益な情報等ありましたらお知恵をお貸しください。

    • ベストアンサー
    • Perl
  • switchでの条件分岐の書き方を教えて下さい。

    こんにちは。 いつもお世話になっております。 またわからない事が出てきてしまったので、どうか ご指導よろしくお願いいたします。 簡単な検索機能をつくりたくて、思考錯誤 しております。 フォームからPOSTで受け取る変数の数は 10個あります。 それぞれの変数が ””でなければ、受け取った 変数を元に、SQL文がかわってゆく。 という事がしたいのです。 10個もあるので、たとえば 変数が$_POST["a"]から$_POST["j"]まであった時に if文を使うとすると if($_POST["a"] != "" && $_POST["b"] == "" && $_POST["c"] != "" (略)){ $stt = "検索したい予定のSQL文1"; }elseif($_POST["a"] == "" && $_POST["b"] != "" && $_POST["c"] != "" (略)){ $stt = "SQL文2"; ・ ・ ・ と言う風に、ものすごいにはなると思うのですがifを つなげていけば良いのかな、と思うのです。 PHPの基礎HPなどを検索してみると、SWITCHを 使えば、多岐に分岐するIF文を、見やすくできる、 と書いてあったので、使ってみたいのですが、書き方の 説明によると switch(変数){ case 値1:  条件を満たす時の処理1 break; case 値2:  条件を満たす時の処理2 default: } と紹介してあったのですが、今回わたしがしたい場合の 条件分岐だと、変数は一つではなく、ある変数は空でこの変数は値が何か入っていて、またもう一つの変数は 空で・・・の時は、このSQL文、というように させたい場合には、switchでどうかけばよいのか わからないのです。 それとも、こういう条件分岐の場合は、switchを 使うべきではないのでしょうか・・・? どうかご指導よろしくお願いいたします。  

    • ベストアンサー
    • PHP
  • switch文について

    下記のようなswitch文に もうひとつの変数 int tmp = Integer.valueOf(変数2).intValue();を代入したいのですが もう一つ代入できるのでしょうか?? 因みにswitch文にIF文を加えて変数を代入するのではなく switch文で複数の変数を使用したいのです。 どうぞよろしくお願いいたします。 なお、質問の意味が分からない、意図が伝わらない方は アドバイスはいりませんので 恐縮ですがアドバイスお願いいたします。 int lot = Integer.valueOf(変数1).intValue(); switch (lot) { case 1: out.print("OK"); break; case 2: out.print("NG"); break; default: out.print("エラー"); break;} }

    • ベストアンサー
    • Java
  • switch文について

    お世話になります。switch文について教えてください。 分岐の条件を複数使用することは出来ますか。 たとえば switch(a) [ case "1": if (x == "0") { document.write(1x0); } else if (x == "1") { document.write(1x1); else { document.write(1x); break; } case "2": if (x == "0") { document.write(2x0); } else if (x == "1") { document.write(2x1); else if (y == "0") { document.write(2y0); else { document.write(2x); break; ] という構文は可能ですか。 case 2でx yの二分岐しても可能ですか。 教えてください。

    • ベストアンサー
    • Java
  • switch の範囲指定

    switch文で以下のように書いた時に処理はCを実行するのですが、 変数a が 0~9の時に こうしますよ と範囲がまだ狭い時はこのように書いても処理はできると思いますが 変数a の範囲が 0~99だった場合、いちいちcase を100回書いて(defaultを使えば処理は減るだろうけど) と数字を100回書かないといけないのはとても面倒だと思うのです。 そこで以下のようにifを使わずにswitchを使って範囲を指定する方法はありませんか? //ifを使った場合の範囲指定 if( ( 0 <= a ) && ( a < 25 ) ){ //略 } else if( ( 25 <= a ) && ( a < 50 ) ){ //略 } else if( ( 50 <= a ) && ( a < 75 ) ){ //略 } else if( ( 75 <= a ) && ( a < 100 ) ){ //略 } //ソース int a = 6; switch( a ){   case 0: case 1:     //処理A     break;   case 2: case 3: case 4:     //処理B     break;   case 5: case 6:     //処理C     break;   case 7: case 8: case 9:     //処理D     break; }

  • if文の使い方について

    if文でaの値とbの値とcの値が一緒なら次の処理を行うものを作成したいのですが。 if($a==$b==$c){ 行いたい処理 }else{ その他の処理 } と書いたのですが、ダメで if($a=$b=$c){ 行いたい処理 }else{ その他の処理 } と書いたのですが、これもダメでした。 if($a==$b) {  if($b==$c)  {    処理   }else{     その他の処理   } }else{ その他の処理 } と書かいたら実行されたのですが、このように分けて書かないとダメなのですか? いいやり方がありましたら教えてください

    • ベストアンサー
    • PHP
  • switch文について

    独学でjavaの勉強をしているのですが、switch文が本のとおりに入力しても エラーがでて困っています。どこが間違っているのかわかりません。 ちなみにプログラム内容は class bunki2{ public static void main(String args[]){ int a; a=1; switch (a) { case1:System.out.println("変数aの値は1です。"); break; case2:System.out.println("変数aの値は2です。"); break; case3:System.out.println("変数aの値は3です。"); break; } } } です。 これでコンパイルしようとすると’case’、’default’、または’}’がありません。とでます。 なぜできないのか教えてください。

    • ベストアンサー
    • Java
  • SafariのIframeで高さが取得できません

    <script language="JavaScript"> <!-- function frame_check(){ if(main.document.body){ if(navigator.userAgent.indexOf("Opera") != -1){ // 文字列に「Opera」が含まれている場合 var f = main.document.body.scrollHeight; } else if(navigator.userAgent.indexOf("MSIE") != -1){ // 文字列に「MSIE」が含まれている場合 var f = main.document.body.scrollHeight; } else if(navigator.userAgent.indexOf("Firefox") != -1){ // 文字列に「Firefox」が含まれている場合 var f = main.document.body.offsetHeight; } else if(navigator.userAgent.indexOf("Netscape") != -1){ // 文字列に「Netscape」が含まれている場合 var f = main.document.body.offsetHeight; } else if(navigator.userAgent.indexOf("Safari") != -1){ // 文字列に「Safari」が含まれている場合 var f = main.documentElement.offsetHeight; } if(f) document.getElementById("frame_set").height=f+20; setTimeout("frame_check()",100); }else{ setTimeout("frame_check()",100); } } setTimeout("frame_check()",10); --></script> <iframe name="main" id="frame_set" src="mainf.html" width="800" height="4000" frameborder="0" scrolling="no"></iframe> 上記のスクリプトを作成しましたが、IE7、 Firefoxではうまくいきますが、SafariではIframeに表示するページの高さが取得できません。 どこが問題なのかご教授お願いいたします。

専門家に質問してみよう