2011-10-28 19 views
0

この質問は恥ずかしくて不満でした。私は "y"を取り除き、 "i"で置き換えるかなり単純なスクリプトでなければならないものを書いています。これが起こると、新しい "i"にクラスを追加して、元に戻すことができます。何らかの理由で、最初の交換作業...スイッチバックの動作...それは再び動作...その後停止します。私は他に何をすべきかわからないが、全体の醜いスクリプトを投稿するだけである。jquery regex replace()は2回しか実行されません...

偽の正規表現(Mohawkの作成に使用されることがある特定の「y」のみを対象としています)を心配しないでください。

EDIT:ここjfiddleのライブバージョンです:それはあなたが削除した後に反復処理するには、noスパン$(「span.mohawk_word」)を持っていないので、http://jsfiddle.net/vkVBk/

$(document).ready(
function() { 

    function swap_out_y(x) { 
     //alert(x); 
     x = x.replace(/y/, "i"); 
     x = x.replace(/Y/, "I"); 
     alert('swap_out_y just ran. x = '+x); 
     return x; 
    } 

    function swap_out_i(x) { 
     //alert(x); 
     x = x.replace(/i/, "y"); 
     x = x.replace(/I/, "Y"); 
     alert('swap_out_i just ran. x = '+x); 
     return x; 
    } 

    $('body').delegate('.y_to_i', 'click', y_to_i); 
    //$('body').delegate('.i_to_y', 'click', i_to_y); 

    function y_to_i() { 

     $("span.mohawk_word").each(
      function() { 
       $(this).html(
        $(this).text().replace(/(y[aevu])|(y[oe]n)/ig, function(s) { 
         return '<span class="consonant">'+swap_out_y(s)+'</span>'; 
         }) 
       ); 
      } 
     ); 



     $('.y_to_i').undelegate('click');  
     $('.y_to_i').addClass('i_to_y'); 
     $('.y_to_i').removeClass('y_to_i'); 
     $('body').delegate('.i_to_y', 'click', i_to_y); 
     //alert('A'); 
    } //end y_to_i 


    function i_to_y(){ 

     $("span.consonant").each(
      function() { 
       $(this).html($(this).text().replace(/i/ig, 
        function(s) { 
         return swap_out_i(s); 
        } 
       )//replace... 
       );//html 
       //$(this).removeClass('replacement_i'); 
      }//function(){ 
     );//each( 

     $('.i_to_y').undelegate('click'); 
     $('.i_to_y').addClass('y_to_i'); 
     $('.i_to_y').removeClass('i_to_y'); 
     $('body').delegate('.y_to_i', 'click', y_to_i); 
    } 

} //function 
); //document ready 
+4

問題はありませんが、正規表現の最後に 'g'フラグを追加したい場合は、最初のインスタンスだけを置き換えます。 – Ryan

+0

http://jsfiddle.net/でライブサンプルを提供できますか? –

+1

'x = x.replace(/ i /、" y ");'をx = x.replace(/ i/g、 "y");などに変更します - サンプルコードも大きすぎます。 – Halcyon

答えて

1

あなたは 'body'の代理人を呼び出し、bodyの代わりにundelegateを呼び出すことになります。だからあなたは複数のデリゲートで終わります。

作業フィドル。 http://jsfiddle.net/5HdSC/1/

+0

はい!それがそれでした。 – emersonthis

0

はあなたi_to_y機能であなたのスパンを忘れてしまったし、それをconsonateと2回置き換えれば、それはなくなった。

編集 あなたのリターンで、追加のスパンを追加する必要はありませんので、実際にはすでにただ、他の機能もmohawk_wordに置き換えmohawk_wordスパン が修正全体にまたがる使うように...あなたのhtmlでスパンを持っています問題。

 function y_to_i() { 

     $("span.mohawk_word").each(
      function() { 
       $(this).html(
        $(this).text().replace(/(y[aevu])|(y[oe]n)/ig, function(s) { 
         return swap_out_y(s); 
         }) 
       ); 
      } 
     ); 



     $('.y_to_i').undelegate('click');   
     $('.y_to_i').addClass('i_to_y'); 
     $('.y_to_i').removeClass('y_to_i'); 
     $('body').delegate('.i_to_y', 'click', i_to_y); 
     //alert('A'); 
    } //end y_to_i 


    function i_to_y(){ 

     $("span.mohawk_word").each(
      function() { 
       $(this).html(
        $(this).text().replace(/i/ig, 
        function(s) { 
         return swap_out_i(s); 
        } 
       ));     
      } 
     ); 

     $('.i_to_y').undelegate('click'); 
     $('.i_to_y').addClass('y_to_i'); 
     $('.i_to_y').removeClass('i_to_y'); 
     $('body').delegate('.y_to_i', 'click', y_to_i); 
    } 

} 
関連する問題