为什么该函数不能与 else If 一起使用而与 else 语句一起使用?
why the function didn't work with else If and works with else statment?
我有一个 id 为“sd-nav-bar”的元素,显示:inline-block,
我有一个按钮(点击它后)会隐藏显示的元素,反之亦然。
但是包含两个 If 的隐藏函数根本不起作用。
let hider = () => {
let nav = document.querySelector('#sd-nav-bar');
if( nav.style.display == 'inline-block' ) {
nav.style.display = 'none'
}
else if( nav.style.display == 'none' ) {
nav.style.display = 'inline-block';
};
}
在我用 'else statment' 替换第二个 if 之后它起作用了,唤醒的代码是:
let hider = () => {
let nav = document.querySelector('#sd-nav-bar');
if( nav.style.display == 'inline-block' ) {
nav.style.display = 'none'
}
else {
nav.style.display = 'inline-block';
}
};
那么为什么会这样?第二个IF错了吗?或者我只需要在这里使用 else 语句,为什么?
我认为问题在于最后一个右大括号之前的分号错误 - 它应该像您的第二个代码片段中那样位于它后面:
let hider = () => {
let nav = document.querySelector('#sd-nav-bar');
if( nav.style.display == 'inline-block' ) {
nav.style.display = 'none'
}
else if( nav.style.display == 'none' ) {
nav.style.display = 'inline-block';
}
};
这个问题的答案很简单。如果 else/if-variant 不工作,则表示没有条件匹配。
nav.style
将 return 一个仅包含 inline 样式的对象。您可能已经在样式表中设置了初始 #sd-nav-bar
样式,在这种情况下,在内联样式中 不存在 。由于这个原因 nav.style.display
将 return 一个空字符串,它既不匹配 'inline-block'
也不匹配 'none'
.
const nav = document.querySelector("#sd-nav-bar");
console.log("display:", nav.style.display);
#sd-nav-bar {
display: inline-block;
}
<div id="sd-nav-bar"></div>
要匹配 display 的计算值,请使用 getComputedStyle()
.
const nav = document.querySelector("#sd-nav-bar");
const computedStyle = getComputedStyle(nav);
console.log("display:", computedStyle.display);
#sd-nav-bar {
display: inline-block;
}
<div id="sd-nav-bar"></div>
我有一个 id 为“sd-nav-bar”的元素,显示:inline-block,
我有一个按钮(点击它后)会隐藏显示的元素,反之亦然。
但是包含两个 If 的隐藏函数根本不起作用。
let hider = () => {
let nav = document.querySelector('#sd-nav-bar');
if( nav.style.display == 'inline-block' ) {
nav.style.display = 'none'
}
else if( nav.style.display == 'none' ) {
nav.style.display = 'inline-block';
};
}
在我用 'else statment' 替换第二个 if 之后它起作用了,唤醒的代码是:
let hider = () => {
let nav = document.querySelector('#sd-nav-bar');
if( nav.style.display == 'inline-block' ) {
nav.style.display = 'none'
}
else {
nav.style.display = 'inline-block';
}
};
那么为什么会这样?第二个IF错了吗?或者我只需要在这里使用 else 语句,为什么?
我认为问题在于最后一个右大括号之前的分号错误 - 它应该像您的第二个代码片段中那样位于它后面:
let hider = () => {
let nav = document.querySelector('#sd-nav-bar');
if( nav.style.display == 'inline-block' ) {
nav.style.display = 'none'
}
else if( nav.style.display == 'none' ) {
nav.style.display = 'inline-block';
}
};
这个问题的答案很简单。如果 else/if-variant 不工作,则表示没有条件匹配。
nav.style
将 return 一个仅包含 inline 样式的对象。您可能已经在样式表中设置了初始 #sd-nav-bar
样式,在这种情况下,在内联样式中 不存在 。由于这个原因 nav.style.display
将 return 一个空字符串,它既不匹配 'inline-block'
也不匹配 'none'
.
const nav = document.querySelector("#sd-nav-bar");
console.log("display:", nav.style.display);
#sd-nav-bar {
display: inline-block;
}
<div id="sd-nav-bar"></div>
要匹配 display 的计算值,请使用 getComputedStyle()
.
const nav = document.querySelector("#sd-nav-bar");
const computedStyle = getComputedStyle(nav);
console.log("display:", computedStyle.display);
#sd-nav-bar {
display: inline-block;
}
<div id="sd-nav-bar"></div>