Javascript 如何不替换已替换的单词
这是我的代码:Javascript 如何不替换已替换的单词,javascript,jquery,Javascript,Jquery,这是我的代码: <script> function TransposeDown() { $("body").html($("body").html().replace(/C/g, 'B')); $("body").html($("body").html().replace(/B/g, 'Bb')); } </script> <button onclick="TransposeDown();">Transpose
<script>
function TransposeDown() {
$("body").html($("body").html().replace(/C/g, 'B'));
$("body").html($("body").html().replace(/B/g, 'Bb'));
}
</script>
<button onclick="TransposeDown();">Transpose Down</button>
<span class="hcrd">C</span>
<span class="hcrd">B</span>
<span class="hcrd">C</span>
函数TransposeDown(){
$(“body”).html($(“body”).html().replace(/C/g,'B'));
$(“body”).html($(“body”).html().replace(/B/g,'Bb'));
}
向下转置
C
B
C
问题是,一旦单击按钮
,所有
标记内的文本将变为“Bb”。但是我想要的是第一个和最后一个span
的文本更改为“B”,第二个文本仅更改为“Bb”
我该怎么做?是否有任何方法可以使函数只执行一次?非常感谢您的帮助。只需将两种方法颠倒过来,先用B替换,然后用C替换:
function TransposeDown() {
$("body").html($("body").html().replace(/B/g, 'Bb'));
$("body").html($("body").html().replace(/C/g, 'B'));
}
您还可以转换到一个特殊的模式(例如,用一个特殊的标记作为所有转换的前缀),然后确保从正则表达式中排除这个标记。最后,从整个文档中删除特殊模式。这将花费更长的时间,但允许您不考虑顺序只需颠倒两种方法,先用B替换,然后用C替换:
function TransposeDown() {
$("body").html($("body").html().replace(/B/g, 'Bb'));
$("body").html($("body").html().replace(/C/g, 'B'));
}
您还可以转换到一个特殊的模式(例如,用一个特殊的标记作为所有转换的前缀),然后确保从正则表达式中排除这个标记。最后,从整个文档中删除特殊模式。这将花费更长的时间,但允许您不考虑顺序您可以反转,这在简单实例中有效,也可以这样做,即使在复杂实例中也有效:
var string = "A B C D";
string = string.replace(/(C)|(B)/g,function(str,p1,p2) {
if(p1) return 'B';
if(p2) return 'Bb';
});
因此,在您的情况下,它将是:
$("body").html($("body").html().replace(/(C)|(B)/g,function(str,p1,p2) {
if(p1) return 'B';
if(p2) return 'Bb';
}));
您可以反转,这在简单实例中有效,也可以这样做,即使在复杂实例中也有效:
var string = "A B C D";
string = string.replace(/(C)|(B)/g,function(str,p1,p2) {
if(p1) return 'B';
if(p2) return 'Bb';
});
因此,在您的情况下,它将是:
$("body").html($("body").html().replace(/(C)|(B)/g,function(str,p1,p2) {
if(p1) return 'B';
if(p2) return 'Bb';
}));
作为一个更一般的解决方案,您可以考虑编写一个匹配两者的正则表达式,并使用一个函数来确定替换。这将适用于任意搜索/替换,因为它一次完成所有操作
$("body").html($("body").html().replace(/(B|C)/g, function(match) {
switch (match) {
case 'B':
return 'Bb';
case 'C':
return 'B';
}
));
作为一个更一般的解决方案,您可以考虑编写一个匹配两者的正则表达式,并使用一个函数来确定替换。这将适用于任意搜索/替换,因为它一次完成所有操作
$("body").html($("body").html().replace(/(B|C)/g, function(match) {
switch (match) {
case 'B':
return 'Bb';
case 'C':
return 'B';
}
));
您应该通过使用公共选择器选择所有元素来按顺序更改它们,如果元素已更改,则跳过更改
var规则=[{
正则表达式:/^C$/g,
str:'B'
}, {
正则表达式:/^B$/g,
str:'Bb'
}];
函数TransposeDown(){
$(“.hcrd”)。每个函数(索引,el){
变量$el=$(el);
var prevVal=$(el.html();
var newVal='';
对于(var i=0;i
向下转置
C
B
C
您应该通过使用公共选择器选择所有元素来按顺序更改它们,如果元素已更改,则跳过更改
var规则=[{
正则表达式:/^C$/g,
str:'B'
}, {
正则表达式:/^B$/g,
str:'Bb'
}];
函数TransposeDown(){
$(“.hcrd”)。每个函数(索引,el){
变量$el=$(el);
var prevVal=$(el.html();
var newVal='';
对于(var i=0;i
向下转置
C
B
我会换一种方式做
<script>
function TransposeDown(){
$("#C").html(text.replace("C", "B"));
$("#B").html(text.replace("B", "Bb"));
}
</script>
<button onclick="TransposeDown();">Transpose Down</button>
<span class="hcrd" id="C">C</span>
<span class="hcrd" id="B">B</span>
<span class="hcrd" id="C">C</span>
函数TransposeDown(){
$(“#C”).html(text.replace(“C”、“B”);
$(“#B”).html(text.replace(“B”,“Bb”));
}
向下转置
C
B
C
我会换一种方式做
<script>
function TransposeDown(){
$("#C").html(text.replace("C", "B"));
$("#B").html(text.replace("B", "Bb"));
}
</script>
<button onclick="TransposeDown();">Transpose Down</button>
<span class="hcrd" id="C">C</span>
<span class="hcrd" id="B">B</span>
<span class="hcrd" id="C">C</span>
函数TransposeDown(){
$(“#C”).html(text.replace(“C”、“B”);
$(“#B”).html(text.replace(“B”,“Bb”));
}
向下转置
C
B
C
由于您显然在尝试转置和弦,因此我会使用原始数据
来存储原始音符,并跟踪用户转置音符的次数。通过这种方式,您可以轻松重置整个事件
工作示例:
更新:开箱即用,这不适用于任何第6、第7、主要、最小值等,但也可以存储为数据属性,并附加到输出中
var注释=[“A”、“Bb”、“B”、“C”、“Db”、“D”、“Eb”、“E”、“F”、“Gb”、“G”、“Ab”];
var转置=0;
函数转置(){
var chords=document.querySelectorAll('.hcrd');
var chord='';
for(var i=0;i
C
B
C
G
E
向下转置
重置
由于您显然在尝试转置和弦,我会使用原始数据
来存储原始音符,并跟踪用户转置音符的次数。通过这种方式,您可以轻松重置整个事件
工作示例:
更新:开箱即用,这不适用于任何第6、第7、主要、最小值等,但也可以存储为数据属性,并附加到输出中
var注释=[“A”、“Bb”、“B”、“C”、“Db”、“D”、“Eb”、“E”、“F”、“Gb”、“G”、“Ab”];
var转置=0;
函数转置(){
var chords=document.querySelectorAll('.hcrd');
var chord='';
对于(var i=0;i