我想显示的是,如果div id="div1"
那么我需要隐藏除 id 为para1
的段落之外的所有段落。
我可以通过 CSS 做到这一点,但问题是我有 100 多组div。我想知道如何通过jQuery或任何代码来做到这一点。
<div class="divclass" id="div1">
<p id="para1" class="pclass">test</p>
<p id="para2" class="pclass">test</p>
<p id="para3" class="pclass">test</p>
<p id="para4" class="pclass">test</p>
<p id="para5" class="pclass">test</p>
</div>
<div class="divclass" id="div2">
<p id="para1" class="pclass">test</p>
<p id="para2" class="pclass">test</p>
<p id="para3" class="pclass">test</p>
<p id="para4" class="pclass">test</p>
<p id="para5" class="pclass">test</p>
</div>
<div class="divclass" id="div3">
<p id="para1" class="pclass">test</p>
<p id="para2" class="pclass">test</p>
<p id="para3" class="pclass">test</p>
<p id="para4" class="pclass">test</p>
<p id="para5" class="pclass">test</p>
</div>
.... up to 100+
如上面的注释中所述,您不能有多个具有相同 id 的元素。所以你必须改变你的div的id,例如
<div class="divclass" id="div1">
<p id="div1-para1" class="pclass">test</p>
<p id="div1-para2" class="pclass">test</p>
<p id="div1-para3" class="pclass">test</p>
</div>
<div class="divclass" id="div2">
<p id="div2-para1" class="pclass">test</p>
<p id="div2-para2" class="pclass">test</p>
</div>
之后,您可以执行类似操作
$('ul.divclass>li:not(:first-child)').hide();
有关详细信息,请参阅小提琴:http://jsfiddle.net/b7yrvk6z/12/
这将做到这一点
$("#div1").children().each(function (){
if($(this).attr("id") !== "para1")
$(this).hide();
});
使用 name 属性代替 id 属性,因为 id 必须是唯一的,以便更好地编码。
function showHideDiv(){
for(var a=0;a<document.getElementsByTagName('div').length;a++){
var b = document.getElementsByTagName('div')[a].getElementsByTagName("*");
for(var c=0;c<b.length;c++){
if(a==c){
b[c].style.display='block';
}else{
b[c].style.display='none';
}
}
}
}
<body onload="showHideDiv()">
<div class="divclass" id="div1">
<p name="para1" class="pclass">test</p>
<p name="para2" class="pclass">test</p>
<p name="para3" class="pclass">test</p>
<p name="para4" class="pclass">test</p>
<p name="para5" class="pclass">test</p>
</div>
<div class="divclass" id="div2">
<p name="para1" class="pclass">test</p>
<p name="para2" class="pclass">test</p>
<p name="para3" class="pclass">test</p>
<p name="para4" class="pclass">test</p>
<p name="para5" class="pclass">test</p>
</div>
<div class="divclass" id="div3">
<p name="para1" class="pclass">test</p>
<p name="para2" class="pclass">test</p>
<p name="para3" class="pclass">test</p>
<p name="para4" class="pclass">test</p>
<p name="para5" class="pclass">test</p>
</div>
<div class="divclass" id="div4">
<p name="para1" class="pclass">test</p>
<p name="para2" class="pclass">test</p>
<p name="para3" class="pclass">test</p>
<p name="para4" class="pclass">test</p>
<p name="para5" class="pclass">test</p>
</div>
因此,设置一个 css 规则,隐藏所有段落并循环以显示您希望可见的段落。
$(".divclass").each( function (i) {
$(this).find("p").eq(i).addClass("show");
});
.divclass > p {
display: none;
}
p.show {
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="divclass" id="div1">
<p data-id="para1" class="pclass">test 1-1</p>
<p data-id="para2" class="pclass">test 1-2</p>
<p data-id="para3" class="pclass">test 1-3</p>
<p data-id="para4" class="pclass">test 1-4</p>
<p data-id="para5" class="pclass">test 1-5</p>
</div>
<div class="divclass" id="div2">
<p data-id="para1" class="pclass">test 2-1</p>
<p data-id="para2" class="pclass">test 2-2</p>
<p data-id="para3" class="pclass">test 2-3</p>
<p data-id="para4" class="pclass">test 2-4</p>
<p data-id="para5" class="pclass">test 2-5</p>
</div>
<div class="divclass" id="div3">
<p data-id="para1" class="pclass">test 3-1</p>
<p data-id="para2" class="pclass">test 3-2</p>
<p data-id="para3" class="pclass">test 3-3</p>
<p data-id="para4" class="pclass">test 3-4</p>
<p data-id="para5" class="pclass">test 3-5</p>
</div>
根据评论,我想我明白你要做什么。
对于您的 HTML,我会将段落更改为使用数据属性而不是 ID(ID 都应该是唯一的,这意味着您不能将 ID para1 设置为多个元素(
<div class="divclass" id="div1">
<p data-div="div1" class="pclass">Show Div 1</p>
<p data-div="div2" class="pclass">test</p>
<p data-div="div3" class="pclass">test</p>
<p data-div="div4" class="pclass">test</p>
<p data-div="div5" class="pclass">test</p>
</div>
<div class="divclass" id="div2">
<p data-div="div1" class="pclass">test</p>
<p data-div="div2" class="pclass">Show Div 2</p>
<p data-div="div3" class="pclass">test</p>
<p data-div="div4" class="pclass">test</p>
<p data-div="div5" class="pclass">test</p>
</div>
<div class="divclass" id="div3">
<p data-div="div1" class="pclass">test</p>
<p data-div="div2" class="pclass">test</p>
<p data-div="div3" class="pclass">Show Div 3</p>
<p data-div="div4" class="pclass">test</p>
<p data-div="div5" class="pclass">test</p>
</div>
然后抓取你的父div,并隐藏数据与父 ID 不匹配的div
$("[id^=div]").each(function(){
let this_id = $(this).attr('id')
$(this).children('[data-div!="' + this_id + '"]').hide()
})
https://codepen.io/Nahana/pen/BOvrwG
我的理解是,您希望根据id
中的整数显示段落数。
根据您的评论:我修改了代码段(注释掉了一个 if 并替换了它(。 您实际上希望显示与id
关联的索引p
。
注意:
- 我在您的段落上留下了
id
,从技术上讲这是不正确的,并且在下面的代码示例中不需要它们。 -
我独自离开了内部循环,但它可以替换为;
$(elem).find("p").eq(count-1).show();
$("div.divclass").each(function(idx, elem) {
//get the count from the div's id
let count = $(elem).attr("id").replace(/div/, "");
$(elem).find("p").each(function(ii, iElem) {
//if (ii < count) $(iElem).show(); //show that many
if (ii == (count-1)) $(iElem).show(); //show that one
});
});
/*lets give the div's a border for clarity */
.divclass {
border: 1px solid black;
}
/*hide all the paragraphs, we'll show the right ones at runtime*/
.divclass > p {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="divclass" id="div1">
<p id="para1" class="pclass">this is number 1</p>
<p id="para2" class="pclass">test</p>
<p id="para3" class="pclass">test</p>
<p id="para4" class="pclass">test</p>
<p id="para5" class="pclass">test</p>
</div>
<div class="divclass" id="div2">
<p id="para1" class="pclass">test</p>
<p id="para2" class="pclass">this is number 2</p>
<p id="para3" class="pclass">test</p>
<p id="para4" class="pclass">test</p>
<p id="para5" class="pclass">test</p>
</div>
<div class="divclass" id="div3">
<p id="para1" class="pclass">test</p>
<p id="para2" class="pclass">test</p>
<p id="para3" class="pclass">this is number 3</p>
<p id="para4" class="pclass">test</p>
<p id="para5" class="pclass">test</p>
</div>