我正在学习JavaScript(jQuery),所以我正在研究一个科学计算器。当我输入诸如:;sin(cos(tan( )时,删除按钮可以正常工作。但是,当我重复类似的输入时,比如说: sin( Cos)(tan(Sin))移除了罪的第一次出现。我想要的是删除每个输入的最后出现(不管是否相似)。我也不想一次删除一个字母/字符。
jQuery代码是我得到的最接近我想要的东西。我也希望能就最佳实践提供任何建议,因为我是初学者。
<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>发布于 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替换您的所有替换用途,它应该可以工作。
发布于 2021-01-11 13:50:31
我想出了这个解决方案。
$("#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);
}
});https://stackoverflow.com/questions/65666143
复制相似问题