Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何不替换已替换的单词_Javascript_Jquery - Fatal编程技术网

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