Javascript 选择所有其他ID不是“this.ID”的元素

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

我有4个元素,在onclick中只显示一个block div

HTML:

问题是,当我单击第一个元素之后的第二个元素时,表示我在p1之后单击p2,块div-block_p1不会随着块_p2的显示而消失,如何在单击第二个之后隐藏第一个块?如果我不使用参数,我会这样做:

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 区块I2
blocki3I看不到任何像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