2011-10-28 66 views
0

我對這個問題感到慚愧和沮喪。我正在寫什麼應該是一個非常簡單的腳本,刪除「Y」並用「我」替換它們。發生這種情況時,我將一個類添加到新的「我」,以便我可以撤消它。出於某種原因,第一個替換工作...切換回工作...它再次工作...然後停止。我不知道還有什麼要做,但只是發佈整個醜陋的腳本。jquery正則表達式替換()只運行兩次...然後不

不要擔心粗糙的正則表達式(它只針對某些有時用於寫作莫霍克族的「y」)。

編輯:這裏有jfiddle真人版: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」);'to'x = x.replace(/ i/g,「y」);'等等 - 你樣本代碼太大了。 – Halcyon

回答

0

您忘記您的跨度在i_to_y功能,所以它沒有跨度$(「span.mohawk_word」),以遍歷您已刪除後用consonate替換它兩次,它消失了。

編輯 其實你已經在你的HTML跨度,所以你並不需要在你的回報增加額外的跨度...只要讓其他函數也使用mohawk_word跨度 與mohawk_word更換整個跨越修復問題。

 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); 
    } 

}