javascript - Javascript 使用 if 语句切换
问题描述
我在玩香草 javascript,想用一个if
声明来切换。p
用 my 写得很好document.getElementById("demo").innerHTML = result;
,但是当我再次单击时它不会消失。
function myFunction() {
var str = "Visit W3Schools";
var patt = /w3schools/i;
var result = str.match(patt);
document.getElementById("demo").innerHTML = result;
if(document.getElementById("demo") == result){
document.getElementById("demo") = "0";
}
}
<p>Click the button to do a case-insensitive search for "w3schools" in a string.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
解决方案
不能document.getElementById("demo")
直接比较result
。document.getElementById("demo")
返回一个HTMLElement
, whileresult
是一个数组。
此外,您在设置元素后检查它的内容。在这种情况下,if
语句将始终计算为true
并且if
块将始终执行,这意味着文本将永远不会出现(它将被设置并立即删除)。
此外,要删除文本,您需要设置.innerHTML
为空字符串 ( ""
),而不是"0"
.
让你的代码工作的最简单的方法:
function myFunction() {
var str = "Visit W3Schools";
var patt = /w3schools/i;
var result = str.match(patt);
if (document.getElementById("demo").innerHTML == result) {
document.getElementById("demo").innerHTML = "";
} else {
document.getElementById("demo").innerHTML = result;
}
}
<p>Click the button to do a case-insensitive search for "w3schools" in a string.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
现在,可以对您的代码进行一些其他改进。
document.getElementById()
有点慢,所以您只想获取一次元素,将其分配给一个变量,然后改用该变量。
此外,尽可能首选使用==
,通常被认为是一种不好的做法。===
但是,如果您在代码中更改==
为===
,它将无法正常工作。原因是str.match(patt)
实际上返回了一个包含一项的数组。当您将其分配给.innerHTML
浏览器时,会将其转换为字符串,这样可以正常工作。但是,当您与 进行比较.innerHTML
时result
,一个是字符串,另一个是数组,因此它们与 不匹配===
。解决方案是 do var result = str.match(patt)[0];
,因为您只对第一个匹配项感兴趣(请记住,数组是零索引的,所以第一项是0
,而不是1
)。
通过这些编辑,您的代码将显示为:
function myFunction() {
var str = "Visit W3Schools";
var patt = /w3schools/i;
var result = str.match(patt)[0];
var demo = document.getElementById("demo")
if (demo.innerHTML === result) {
demo.innerHTML = "";
} else {
demo.innerHTML = result;
}
}
<p>Click the button to do a case-insensitive search for "w3schools" in a string.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
推荐阅读
- amazon-web-services - CloudWatch 指标和警报中的“总和”如何工作?
- fmt - fmt : 格式化浮点数/双精度而不带格式字符串
- angular - 从 7 到 11 的 Angular 更新
- c# - 避免 Task.Run 导致主线程死锁(C#)
- authentication - 密钥斗篷错误:[org.pac4j.oidc.credentials.authenticator.OidcAuthenticator]
- reactjs - 完成之前的查询后如何使用 useQuery 获取数据
- javascript - 在javascript中调用ajax后返回对象
- android - Android:如何在 PIP 模式下显示 AlertDialog?
- reactjs - React:React Facebook Login 调用 onsubmit 两次?
- javascript - 在 nodejs Model.populate() 中只填充一个参考 ID?