单击以显示使用Javascript的div

单击以显示使用Javascript的div,javascript,Javascript,是否有更有效的方法使用Javascript创建此函数 如中所示,第一个块可以正常工作,但第二个块不行。我计划将其推广到数百个类别,所以不知道这里是否有更整洁的解决方案 const btn = document.getElementById("category36SeeMore"); btn.addEventListener("click", function(e){ e.preventDefault(); const id = this.id.replace('SeeMore', '')

是否有更有效的方法使用Javascript创建此函数

如中所示,第一个块可以正常工作,但第二个块不行。我计划将其推广到数百个类别,所以不知道这里是否有更整洁的解决方案

const btn = document.getElementById("category36SeeMore");
btn.addEventListener("click", function(e){
  e.preventDefault();
  const id = this.id.replace('SeeMore', '')
  document.querySelectorAll('.' + id).forEach(el=>el.style.display = 'block')
});

.category36 {
  margin: 5px;
  padding: .5rem;
  box-shadow: 2px 2px 5px rgba(0,0,0,0.03);
  border-radius: 4px;
  background: Skyblue;
  border-bottom: 1px solid #F9F2D6;
  border-right: 1px solid #F9F2D6;
}

<p>
<a href="#" id="category36SeeMore">See more</a>
</p>

<div class="category36">
test
</div>

<div class="category36" style="display:none;">
test
</div>

<div class="category36" style="display:none;">
test
</div>

<div class="category36" style="display:none;">
test
</div>


<hr>

<p>
<a href="#" id="category37SeeMore">See more</a>
</p>

<div class="category37">
test
</div>

<div class="category37" style="display:none;">
test
</div>

<div class="category37" style="display:none;">
test
</div>

<div class="category37" style="display:none;">
test
</div>
const btn=document.getElementById(“category36SeeMore”);
btn.addEventListener(“点击”,函数(e){
e、 预防默认值();
const id=this.id.replace('SeeMore','')
document.querySelectorAll('.'+id).forEach(el=>el.style.display='block'))
});
.类别36{
保证金:5px;
填充:.5rem;
盒影:2px2p5pRGBA(0,0,0,0.03);
边界半径:4px;
背景:天蓝色;
边框底部:1px实心#F9F2D6;
右边框:1px实心#F9F2D6;
}

测验 测验 测验 测验

测验 测验 测验 测验
演示:


jQuery在这里是更好的方法吗?我们已经在站点上使用了它。

您必须以所有元素为目标,并通过它们循环以附加事件。您可以使用以选择器开头的属性,也可以使用公共类以元素为目标:

const btnList=document.queryselectoral(“a[id^=category”);
btnList.forEach(函数(btn){
btn.addEventListener(“点击”,函数(e){
e、 预防默认值();
const id=this.id.replace('SeeMore','')
document.querySelectorAll('.'+id).forEach(el=>el.style.display='block'))
});
});
.category36、.category37{
保证金:5px;
填充:.5rem;
盒影:2px2p5pRGBA(0,0,0,0.03);
边界半径:4px;
背景:天蓝色;
边框底部:1px实心#F9F2D6;
右边框:1px实心#F9F2D6;
}

测验 测验 测验 测验

测验 测验 测验 测验
您必须以所有元素为目标,并通过它们循环以附加事件。您可以使用“属性以选择器开头”或使用公共类以元素为目标:

const btnList=document.queryselectoral(“a[id^=category”);
btnList.forEach(函数(btn){
btn.addEventListener(“点击”,函数(e){
e、 预防默认值();
const id=this.id.replace('SeeMore','')
document.querySelectorAll('.'+id).forEach(el=>el.style.display='block'))
});
});
.category36、.category37{
保证金:5px;
填充:.5rem;
盒影:2px2p5pRGBA(0,0,0,0.03);
边界半径:4px;
背景:天蓝色;
边框底部:1px实心#F9F2D6;
右边框:1px实心#F9F2D6;
}

测验 测验 测验 测验

测验 测验 测验 测验
如果您使用的是纯javascript(如您的示例),则可以应用以下逻辑:

  • 为所有容器指定一个特定类,如
    category container
  • 不要使用ID选择一个,而是使用类名选择它们
  • 循环它们以添加事件
  • 确保事件将更改当前父级的子级的显示

添加新类别不会破坏任何东西。这应该是完全可伸缩的。

如果您使用纯javascript(如您的示例),则可以应用以下逻辑:

  • 为所有容器指定一个特定类,如
    category container
  • 不要使用ID选择一个,而是使用类名选择它们
  • 循环它们以添加事件
  • 确保事件将更改当前父级的子级的显示

添加新类别不会破坏任何东西。这应该是完全可伸缩的。

使用jQuery可能会使事情变得更简单。下面是一种使用纯JavaScript的方法

const categoryCount = 36
for (let i = 0; i < categoryCount; i++) {
  const btn = document.getElementById(`category${i+1}SeeMore`)
  if (btn) {
    btn.addEventListener("click", e => {
      e.preventDefault();
      document.querySelectorAll(`.category${i+1}`)
        .forEach(el => el.style.display = 'block')
    })
  }
}
const categoryCount=36
for(设i=0;i{
e、 预防默认值();
document.querySelectorAll(`.category${i+1}`)
.forEach(el=>el.style.display='block')
})
}
}

使用jQuery可能会使事情变得简单一些

const categoryCount = 36
for (let i = 0; i < categoryCount; i++) {
  const btn = document.getElementById(`category${i+1}SeeMore`)
  if (btn) {
    btn.addEventListener("click", e => {
      e.preventDefault();
      document.querySelectorAll(`.category${i+1}`)
        .forEach(el => el.style.display = 'block')
    })
  }
}
const categoryCount=36
for(设i=0;i{
e、 预防默认值();
document.querySelectorAll(`.category${i+1}`)
.forEach(el=>el.style.display='block')
})
}
}

您可以将所有
元素更改为类,然后将
数据-*
属性添加到所有以指向要显示的集合,如:

<a href="#" class="SeeMore" data-id="36">See more</a>
然后轻松显示集合div,如:

document.querySelectorAll('.category' + id).forEach(el=>el.style.display = 'block')
const btns=document.queryselectoral(“.SeeMore”);
btns.forEach(功能(btn){
btn.addEventListener(“点击”,函数(e){
e、 预防默认值();
const id=this.dataset.id
document.querySelectorAll('.category'+id).forEach(el=>el.style.display='block'))
});
});
.category36、.category37{
保证金:5px;
填充:.5rem;
盒影:2px2p5pRGBA(0,0,0,0.03);
边界半径:4px;
背景:天蓝色;
边框底部:1px实心#F9F2D6;
右边框:1px实心#F9F2D6;
}

测验 测验 测验 测验

测验 测验 测验 测验
您可以将所有
元素更改为类,然后将
数据-*
属性添加到所有以指向要显示的集合,如:

<a href="#" class="SeeMore" data-id="36">See more</a>
然后轻松显示集合div,如:

document.querySelectorAll('.category' + id).forEach(el=>el.style.display = 'block')
const btns=document.queryselectoral(“.SeeMore”);
btns.forEach(功能(btn){
btn.addEventListener(“点击”,函数(e){
e、 预防默认值();
const id=this.dataset.id
document.querySelectorAll('.category'+id).forEach(el=>el.style.display='block'))
});
});
.category36、.category37{
保证金:5px;
填充:.5rem;
盒影:2px2p5pRGBA(0,0,0,0.03);
边界半径