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