首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为JavaScript计算器实现一个删除按钮

为JavaScript计算器实现一个删除按钮
EN

Stack Overflow用户
提问于 2021-01-11 11:36:03
回答 2查看 291关注 0票数 0

我正在学习JavaScript(jQuery),所以我正在研究一个科学计算器。当我输入诸如:;sin(cos(tan( )时,删除按钮可以正常工作。但是,当我重复类似的输入时,比如说: sin( Cos)(tan(Sin))移除了罪的第一次出现。我想要的是删除每个输入的最后出现(不管是否相似)。我也不想一次删除一个字母/字符。

jQuery代码是我得到的最接近我想要的东西。我也希望能就最佳实践提供任何建议,因为我是初学者。

代码语言:javascript
运行
复制
    <script type="text/javascript" charset="utf-8">
      $("document").ready(function (){
        $("#del").click(function (){
          var x = $("#input-field").val();
          var x_len = $("#input-field").val().length;
          var sin_lindex = x.lastIndexOf("sin");
          var cos_lindex = x.lastIndexOf("cos");
          var tan_lindex = x.lastIndexOf("tan");
          
          if (sin_lindex > cos_lindex && sin_lindex > tan_lindex){
            var value = x.replace("sin(", "");
            $("#input-field").val(value)
          }
          else if (sin_lindex < cos_lindex && cos_lindex > tan_lindex){
            var value = x.replace("cos(", "");
            $("#input-field").val(value)
          }
          else if (tan_lindex > cos_lindex && sin_lindex < tan_lindex){
            var value = x.replace("tan(", "");
            $("#input-field").val(value)
          }
        });
        $(".param").on("click", function (){
          if($("#inv").hasClass("outlaw")){
            document.getElementById("input-field").value += $(this).text().slice(0, -2) + "\u2212" + "\u00b9" + "(";
            document.getElementById("input-field2").value += "Math.a" + $(this).text().slice(0, -2) + "(";
          }
          else{
            document.getElementById("input-field").value += $(this).text() + "(";
            document.getElementById("input-field2").value += "Math." + $(this).text() + "((Math.PI/180)*";
          }
        });
      });
    </script>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-11 11:43:25

您的代码“它移除第一次出现”的原因是您使用了具有字符串模式的replace()方法。

-- replace()方法返回一个新字符串,其中一些或所有匹配的模式被替换。模式可以是字符串或RegExp,替换可以是要为每个匹配调用的字符串或函数。如果模式是字符串,则只替换第一次出现的.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

因此,您应该使用Regex (正则表达式)来识别术语的最后出现。为此,请考虑检查本答复中的详细说明:

Using regex to replace only the last occurrence of a pattern with JS

然后用replace替换您的所有替换用途,它应该可以工作。

票数 2
EN

Stack Overflow用户

发布于 2021-01-11 13:50:31

我想出了这个解决方案。

代码语言:javascript
运行
复制
$("#del").click(function (){
              var x = $("#input-field").val();
              var sin_lindex = x.lastIndexOf("sin");
              var cos_lindex = x.lastIndexOf("cos");
              var tan_lindex = x.lastIndexOf("tan");
              
              if (sin_lindex > cos_lindex && sin_lindex > tan_lindex){
                var value = x.replace(/sin\($/g, "");
                $("#input-field").val(value);
              }
              else if (sin_lindex < cos_lindex && cos_lindex > tan_lindex){
                var value = x.replace(/cos\($/g, "");
                $("#input-field").val(value);
              }
              else if (tan_lindex > cos_lindex && sin_lindex < tan_lindex){
                var value = x.replace(/tan\($/g, "");
                $("#input-field").val(value);
              }
            });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65666143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档