首页 > 解决方案 > JavaScript 中的子字符串截断了超出应有的内容

问题描述

我对 JavaScript 还很陌生,但今天我偶然发现了一个奇怪的问题,如果有人能为我提供一些启示,我将不胜感激。

我正在开发 HTML 中的计算器。我在 js 中有一个函数用于 div 上的 onclick 事件。该 div 的作用类似于具有以下代码的退格按钮:

function remove() {
    var input = document.getElementById("input");

    input.innerHTML = input.innerHTML.substring(0, input.innerText.length - 1);

    // Check if comma exists
    if (input.innerHTML.indexOf(",") == -1) {
        comma = false;
    }
}

它从我的段落的 innerHTML 中删除最后添加的数字,就像它应该的那样。但是,在以下函数中执行完全相同的操作会以某种方式从段落中删除两个字符,而不是一个:

function buttonOperator(operator) {
    var input = document.getElementById("input");
    var calc = document.getElementById("calculation");

    // Make sure new number isn't empty and fits into the calculation
    if (input.innerHTML != "") {
        // Bunch of code
    }
    else {
        // This line removes two characters instead of one
        calc.innerHTML = calc.innerHTML.substring(0, calc.innerText.length - 1);
        operators.pop();

        switch (operator) {
            case "÷":
                calc.innerHTML += "÷";
                operators.push("÷");
                break;
            
            case "×":
                calc.innerHTML += "×";
                operators.push("×");
                break;
            
            case "−":
                calc.innerHTML += "−";
                operators.push("−");
                break;
            
            case "+":
                calc.innerHTML += "+";
                operators.push("+");
                break;
        }
    }

    input.innerHTML = "";
    comma = false;
}

该函数的目的是删除段落末尾已经存在的运算符并用新的运算符替换它。但是以与我在删除函数中相同的方式删除最后一个字符会以某种方式删除两个字符。

如果我有:

98 +

例如,再次按下加号将留下以下内容:

98+

然后再次:

9+

等等

我真的不明白这怎么可能发生。如果有人可以向我解释以供将来参考,我将不胜感激。

标签: javascriptsubstring

解决方案


推荐阅读