You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript方法无法识别HTML实体编码,吉他指板工具升降音切换遇阻

解决吉他指板工具升降音切换的HTML实体识别问题

问题根源

你切换升音时用includes('U+0266D;')判断完全错误——浏览器会把HTML实体♭解析成实际的降号字符♭(Unicode编码U+266D),此时ball.innerHTML里存的是这个字符本身,而非实体字符串,所以用实体编码或Unicode格式字符串去匹配肯定找不到。

修复方案

直接用实际的降号字符♭做判断,同时优化升音切换逻辑,还原回带#的音符:

function nextChar(char) {
    return String.fromCharCode(char.charCodeAt(0) + 1);
}

function prevChar(char) {
    return String.fromCharCode(char.charCodeAt(0) - 1);
}

flatNote.addEventListener('click', flatFunc);
function flatFunc() {
    ballArray.forEach(function(ball) {
        // 带#的音符转降音:比如G# → A♭
        if (ball.innerHTML.includes('#')) {
            const baseNote = ball.innerHTML.replace('#', '');
            ball.innerHTML = nextChar(baseNote) + '♭';
        }
        // 处理特殊情况H → A♭(德语体系里H对应B)
        if (ball.innerHTML === 'H') {
            ball.innerHTML = 'A♭';
        }
    });
}

sharpNote.addEventListener('click', sharpFunc);
function sharpFunc() {
    ballArray.forEach(function(ball) {
        // 直接判断降号字符♭
        if (ball.innerHTML.includes('♭')) {
            const baseNote = ball.innerHTML.replace('♭', '');
            // 降音转回升音:比如A♭ → G#
            ball.innerHTML = prevChar(baseNote) + '#';
        }
        // 特殊情况还原:A♭ → H
        if (ball.innerHTML === 'A♭') {
            ball.innerHTML = 'H';
        }
    });
}

关键优化点

  • 直接用实际字符♭判断,避开HTML实体解析的坑
  • 拆分音符的基础字符和修饰符(#/♭),逻辑更清晰,避免nextChar直接处理带修饰符的字符串
  • 还原prevChar函数,用于从降音反向推导升音

内容的提问来源于stack exchange,提问作者Steven Brooks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:02:58