Javascript 选择所有其他ID不是“this.ID”的元素
我有4个元素,在onclick中只显示一个block div HTML: 问题是,当我单击第一个元素之后的第二个元素时,表示我在p1之后单击p2,块div-block_p1不会随着块_p2的显示而消失,如何在单击第二个之后隐藏第一个块?如果我不使用参数,我会这样做:Javascript 选择所有其他ID不是“this.ID”的元素,javascript,html,dom,Javascript,Html,Dom,我有4个元素,在onclick中只显示一个block div HTML: 问题是,当我单击第一个元素之后的第二个元素时,表示我在p1之后单击p2,块div-block_p1不会随着块_p2的显示而消失,如何在单击第二个之后隐藏第一个块?如果我不使用参数,我会这样做: function expand() { document.getElementById("block_p2").style.display = "block"; document.getElementById("p2").style
function expand() {
document.getElementById("block_p2").style.display = "block";
document.getElementById("p2").style.backgroundColor = "#425a94";
document.getElementById("block_p1").style.display = "none";
}
我不知道如何在有参数的情况下做同样的事情。另外,在选择第三个元素的情况下,我还需要隐藏前两个块。首先需要隐藏以id EXTENDED开头的所有div,只需在代码的其余部分之前添加这一行即可
var allExpanded = document.querySelectorAll( "div[id^='expanded_']" );
Array.from( allExpanded ).forEach( s => (s.style.display = "none") );
你的功能变成了
function expand(e)
{
//first hide all
var allExpanded = document.querySelectorAll( "div[id^='expanded_']" );
Array.from( allExpanded ).forEach( s => (s.style.display = "none") );
//then show specific
document.getElementById("expanded_" + e).style.display = "block";
document.getElementById(e).style.backgroundColor = "#425a94";
document.getElementById("toolbar_expand").style.display = "block";
}
首先需要隐藏所有以id开头的div,只需在代码的其余部分之前添加这一行即可
var allExpanded = document.querySelectorAll( "div[id^='expanded_']" );
Array.from( allExpanded ).forEach( s => (s.style.display = "none") );
你的功能变成了
function expand(e)
{
//first hide all
var allExpanded = document.querySelectorAll( "div[id^='expanded_']" );
Array.from( allExpanded ).forEach( s => (s.style.display = "none") );
//then show specific
document.getElementById("expanded_" + e).style.display = "block";
document.getElementById(e).style.backgroundColor = "#425a94";
document.getElementById("toolbar_expand").style.display = "block";
}
您可以使用id匹配选择器获取id为block_uu作为子字符串的所有div,然后隐藏除单击的div之外的所有div
函数expandid{
document.getElementById'block_uzy'+id.style.display=block;
document.getElementByIdid.style.backgroundColor=425a94;
document.querySelectorAll'[id^=block_u3;]'.forEachfunctionelem{
ifelem.id!==“块”+id{
elem.style.display=无;
变量pId=元素id拆分“'[1];
document.getElementByIdpId.style.backgroundColor=fff;
}
};
}
div{
显示:无;
}
p1单击
p2单击
p3单击
p4单击
P1 P2 P3 P4您可以使用id匹配选择器获取id为block_uu作为子字符串的所有div,然后隐藏除单击的div之外的所有div 函数expandid{ document.getElementById'block_uzy'+id.style.display=block; document.getElementByIdid.style.backgroundColor=425a94; document.querySelectorAll'[id^=block_u3;]'.forEachfunctionelem{ ifelem.id!==“块”+id{ elem.style.display=无; 变量pId=元素id拆分“'[1]; document.getElementByIdpId.style.backgroundColor=fff; } }; } div{ 显示:无; }p1单击
p2单击
p3单击
p4单击
P1 P2 P3 P4,一个小修改,用于拾取所有可在函数中循环的显示元素,以删除先前添加的类: const buttons=document.queryselectoral.button'; const slides=document.querySelectorAll.slide'; buttons.forEachbutton=>{ 按钮。addEventListener'click',handleClick,false; }; 功能手柄{ const id=e.target.dataset.id; slides.forEachslide=>slide.classList.remove'show'; const slide=document.querySelector`.slide[data id=${id}]`; 幻灯片.类列表.添加'show'; } .幻灯片{ 显示:无; } .表演{ 显示:块; }icon1
icon2
icon3
区块1 区块I2 blocki3,一个小修改,用于拾取所有可在函数中循环的显示元素,以删除先前添加的类: const buttons=document.queryselectoral.button'; const slides=document.querySelectorAll.slide'; buttons.forEachbutton=>{ 按钮。addEventListener'click',handleClick,false; }; 功能手柄{ const id=e.target.dataset.id; slides.forEachslide=>slide.classList.remove'show'; const slide=document.querySelector`.slide[data id=${id}]`; 幻灯片.类列表.添加'show'; } .幻灯片{ 显示:无; } .表演{ 显示:块; }icon1
icon2
icon3
区块1 区块I2blocki3I看不到任何像expanded\u p2或toolbar\u Expander这样的元素为什么要使用ID?一个班级适合你this@Brainfeeder很抱歉从原始代码复制后忘记编辑。已修复。@pploypiti也许答案对您有所帮助。我看不到任何像expanded\u p2或toolbar\u expanded这样的元素。您为什么要使用ID?一个班级适合你this@Brainfeeder很抱歉从原始代码复制后忘记编辑。已修复。@pploypiti可能这个div[id^='expanded_']中的答案对您有帮助,这是我见过的最糟糕的事情。就好像你100%确定文档中不会有任何其他ID为的div,这在统计上是错误的。@ibrahimmahrir这个问题没有问题。。。我有时会使用这样的选择器,如果ID的名称与它们应该的名称相同,那么“100%确保文档中不会有任何其他ID与之类似的div”就不会有任何危险。虽然“扩展”相当普遍,可以在其他地方使用…@Brainfeeder很公平。虽然一个特别挑选的类会更好。@ibrahimmahrir==booltruediv[id^='expanded_']是我见过的最糟糕的事情。就像你是100%的s
ure文档中不会有任何其他具有ID的div,这在统计上是错误的。@ibrahimmahrir但这个问题没有问题。。。我有时会使用这样的选择器,如果ID的名称与它们应该的名称相同,那么“100%确保文档中不会有任何其他ID与之类似的div”就不会有任何危险。虽然“扩展”相当普遍,可以在其他地方使用…@Brainfeeder很公平。虽然一个特别挑选的班级会更好。@ibrahimmahrir===booltrue