我对这个问题感到羞愧和沮丧。我写的应该是一个非常简单的脚本,删除“y”并用“i”替换它们。当发生这种情况时,我将一个类添加到新的“i”中,以便我可以撤消它。由于某种原因,第一次更换工作...切换回工作......它再次工作...然后停止。我不知道还能做什么,只是发布整个丑陋的剧本。
不要担心粗糙的正则表达式(它只针对某些有时用于编写Mohawk的“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
答案 0 :(得分:1)
你在'body'上调用委托,然后在某些类而不是body上调用undelegate。所以你最终会遇到多个代表。
工作小提琴。 http://jsfiddle.net/5HdSC/1/
答案 1 :(得分:0)
你忘记了你的i_to_y函数中的跨度,所以它没有跨度$(“span.mohawk_word”)在你删除并用consonate替换它两次之后迭代,它就消失了。
修改强> 实际上你已经在你的html中有了span,所以你不需要在你的回报中添加额外的跨度......只需让其他函数也使用mohawk_word span 替换为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);
}
}