使用JQuery

时间:2018-06-19 13:56:49

标签: javascript jquery

我有大量的divs用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,是否还可以隐藏任何div?

任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:0)

这是您的方法。首先选择所有项目,它们将处于无序集合中。然后将所有葡萄酒和所有奶酪一起分类。

此后,您要做的就是以交替顺序附加项目。我认为最简单的方法是将它们从数组底部逐个追加(从弹出(pop)开始,然后从开头(shift)移出)。

如果奶酪或葡萄酒的数量不均匀,则列表的末尾可能有相同类型的重复项。您可以使用同级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>