我正在我的页面上输入一个显示/隐藏范围标记,其中单击时将显示其下方的段落,并在再次单击时再次隐藏它。
我以前通过在元素上设置多个ID来完成此操作,例如:
function pageLoad() {
display();
noDisplay();
}
function display() {
var here = document.getElementById('one');
var more = document.getElementById('show')
function visible() {
more.style.display = 'block';
here.style.display = 'none';
}
here.addEventListener('click', visible);
}
function noDisplay() {
var hide = document.getElementById('hide');
var less = document.getElementById('show');
var more = document.getElementById('one');
function inVisible() {
less.style.display = 'none';
more.style.display = 'block';
}
show.addEventListener('click', inVisible);
}
window.onload = pageLoad();
<p>Some Text</p>
<span id="one"> Show more... </span>
<p id="show" style="display: none;">Some more text... <br /><span id="hide">Less text</span></p>
然而,这导致了大量过多的代码。所以我尝试用queryselector
来做,但我无法弄清楚在这个函数中输入第二个queryselector
的位置。这是我在代码段中的当前代码,它返回一个错误,因为我不知道在哪里输入第二个queryselector
,所以它不起作用:
function startUp() {
showText();
}
function showText() {
var clicker = document.getElementsByClassName('display');
var show = document.getElementsByClassName('showandhide');
for (let i = 0; i < clicker.length; i++) {
clicker[i].addEventListener('click', function() {
if (clicker[i].querySelector('show').style.display == 'none') {
show.style.display = 'inline-block';
} else
show.style.display = 'none';
});
};
}
window.onload = startUp;
<p>Some Text</p><span class="display"> ...Continue reading... </span>
<p class="showandhide">Some More Text...</p>
<p>Some Text</p><span class="display"> ...Continue reading... </span>
<p class="showandhide">Some More Text...</p>
<p>Some Text</p><span class="display"> ...Continue reading... </span>
<p class="showandhide">Some More Text...</p>
我是否需要为某个地方的第二个for
输入另一个queryselector
循环,或者我是否需要在className
之后更改eventListener
以表示该类额外的文字?
这是我第一次尝试这样做,而不是以前的多个ID和过多代码的方法。我在谷歌搜索嵌套for
循环和queryselectors
并没有什么好处。
答案 0 :(得分:1)
发布此答案,以便其他人可能受益... 在成员将其分解为逻辑部分之后,我努力为show类放置第二个循环,我想出来了。
function startUp() {
showText();
}
function showText() {
var clicker = document.getElementsByClassName('display');
var show = document.getElementsByClassName('showandhide');
for (let i = 0; i < clicker.length; i++) {
clicker[i].addEventListener('click', function() {
for (let x = 0; x < show.length; x++) {
if (show[x].style.display == "none") {
show[x].style.display = 'inline-block';
} else
show[x].style.display = 'none';
};
});
};
}
window.onload = startUp();
.showandhide {
display: none;
}
<p>Some Text...</p><span class="display"> ...Continue reading... </span>
<p class="showandhide">Some Other Text</p>
我必须遍历“clicker”循环中的“show”类,然后应用该样式。