javascript - 使用 JQuery 替换和隐藏 div
问题描述
我有大量的 div 正在使用 PHP 输出到页面,它们具有“奶酪”或“葡萄酒”两个类之一:
<div class="cheese"></div>
<div class="wine"></div>
<div class="cheese"></div>
<div class="cheese"></div>
<div class="cheese"></div>
<div class="wine"></div>
如何使用 jquery 让它们交替出现?所以它们看起来像这样:
<div class="cheese"></div>
<div class="wine"></div>
<div class="cheese"></div>
<div class="wine"></div>
<div class="cheese"></div>
<div class="wine"></div>
如果最后有两个“奶酪”div然后隐藏最后一个,是否也可以隐藏任何div?
非常感谢任何帮助!
解决方案
这是你可以做到的。首先选择所有项目,它们将处于无序集合中。然后将所有葡萄酒分类,然后是所有奶酪。
之后,您需要做的就是以交替顺序附加项目。我认为最简单的方法是一个接一个地从数组中取出项目,从底部(弹出),然后从开始(移位)。
如果您的奶酪或酒的数量不均匀,那么列表的最后可能会有相同类型的重复项目。您可以使用同级 CSS 选择器 ( .wine + .wine
) 隐藏那些多余的项目。
const container = document.querySelector('.container')
const items = document.querySelectorAll('.cheese, .wine')
const sorted = [...items].sort((a, b) => {
return a.className === b.className ? -1 : 1
})
while (sorted.length) {
let item = sorted.length % 2 ? sorted.shift() : sorted.pop()
container.appendChild(item)
}
/* hide repeating items */
.cheese + .cheese,
.wine + .wine {
display: none;
}
/* visual styles */
.cheese,
.wine {
width: 200px;
height: 25px;
margin-bottom: 5px;
}
.cheese {
background: yellow;
}
.wine {
background: red
}
<div class="container">
<div class="cheese"></div>
<div class="wine"></div>
<div class="wine"></div>
<div class="wine"></div>
<div class="cheese"></div>
<div class="cheese"></div>
<div class="wine"></div>
<div class="wine"></div>
</div>
推荐阅读
- laravel - 已解决:推送错误:提供了未知的“Pusher_App_Id”
- javascript - 如何在 React 中测试 Bambora iframe 的事件监听器?
- json - Flutter - 嵌套响应时如何正确解析Json数据?
- eclipse - 无法在 DBeaver 21 上安装 Marketplace 客户端 1.8.2
- api - 如何获取 Instagram 用户的个人资料图片网址?
- javascript - Vue如果满足条件但不显示结果
- angular - 将两次 API 调用转换为一次,并在两个组件中使用其数据
- r - 在没有渲染功能的 R Shiny 中显示 Plotly Plot
- sql - 雪花我们如何遍历临时表的每一行并将其值插入到另一个表中,其中每个字段的值都是单行?
- unit-testing - Azure Pipeline:如何保存 Visual Studio“测试结果”以用于管道中的其他任务?