为 JavaScript 计算器实现删除按钮
Implement a delete button for a JavaScript calculator
我正在学习 JavaScript(jQuery),所以我正在研究科学计算器。当我输入以下内容时,删除按钮工作正常; sin(cos(tan(。但是当我重复类似的输入时,比如说;sin(cos(tan(sin(,它删除sin( 的第一次出现。我想要的是删除每个输入的最后一次出现(相似与否)。我不想删除一个 letter/character也有一次。
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>
您的代码“它删除了第一次出现的”的原因是您使用的是带有字符串模式的 replace() 方法。
The replace() method returns a new string with some or all matches of
a pattern replaced by a replacement. The pattern can be a string or a
RegExp, and the replacement can be a string or a function to be called
for each match. If pattern is a string, only the first occurrence will
be replaced.
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 regex 替换所有替换使用,它应该可以工作。
我想到了这个解决方案。
$("#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);
}
});
我正在学习 JavaScript(jQuery),所以我正在研究科学计算器。当我输入以下内容时,删除按钮工作正常; sin(cos(tan(。但是当我重复类似的输入时,比如说;sin(cos(tan(sin(,它删除sin( 的第一次出现。我想要的是删除每个输入的最后一次出现(相似与否)。我不想删除一个 letter/character也有一次。
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>
您的代码“它删除了第一次出现的”的原因是您使用的是带有字符串模式的 replace() 方法。
The replace() method returns a new string with some or all matches of a pattern replaced by a replacement. The pattern can be a string or a RegExp, and the replacement can be a string or a function to be called for each match. If pattern is a string, only the first occurrence will be replaced.
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 regex 替换所有替换使用,它应该可以工作。
我想到了这个解决方案。
$("#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);
}
});