如何迭代 HTML <div> 元素数组并为每个索引号设置不同的样式?

Posted

技术标签:

【中文标题】如何迭代 HTML <div> 元素数组并为每个索引号设置不同的样式?【英文标题】:How to iterate an array of HTML <div> elements and style another element differently for each index number? 【发布时间】:2021-02-01 12:27:23 【问题描述】:

我希望 div 的伪元素 ::aftercontent 值在将鼠标悬停在这 6 个 div 中的每一个上时根据 6 个子 div 元素的索引号进行更改。

我坚持创建 6 个 div 的第一个数组和另一个包含 6 个信息的数组,以相同的相应索引号显示。

数组 #1 将是 [.hov-sq:nth-child(1), .hov-sq:..] 数组 #2 将是每次悬停时更改的“数据内容”属性的内容['数字游牧民族','数字开发者','超人','等等...]

到目前为止,我设法使用此 jQuery 代码和 CSS 代码更改了伪元素内容。

$('.hov-sq').hover(function() 
  $('.c-1').attr('data-content', 'frontend developer');
);
.landing-hov-s 
  width: 100vw;
  height: 100vh;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  display: flex;
  flex-wrap: wrap;


.hov-sq 
  width: 33.3333333vw;
  height: 50vh;
  z-index: 5000;


.c-1::after 
  /* other styling not relevant to issue */
  content: attr(data-content) '';
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="landing-hov-s">
  <div class="hov-sq"></div>
  <div class="hov-sq"></div>
  <div class="hov-sq"></div>
  <div class="hov-sq"></div>
  <div class="hov-sq"></div>
  <div class="hov-sq"></div>
</div>
<div class="c-1">
  <h1>Laurent<br>&nbsp;&nbsp;&nbsp;Chevrette</h1>
</div>

该页面已在此处正常显示:http://vmax.laurentchevrette.digital/

【问题讨论】:

您能否更清楚地描述您正在尝试做的事情。您的 sn-p 似乎按照您的建议工作,您只需要向其添加更多内容 嗨,谢谢,我真的很想把它说清楚,但我会用更多信息更新它,也不想让它太长。谢谢! 基本上我希望 .c-1 的 ::after 的内容在用户将鼠标悬停在着陆页上的 6 个 div 上时更改,以便交换 6 个不同的信息文本我。 【参考方案1】:

使用index() 确定悬停集合中哪个元素的索引

const content = ['Item 1','Item 2','Item 3','Item 4','Item 5','Item 6'];

const $sq = $('.hov-sq').hover(function() 
  const idx = $sq.index(this);
  $('.c-1').attr('data-content', content[idx]);
, function()
   // remove when mouse leaves if wanted 
   $('.c-1').attr('data-content','')
);
.landing-hov-s 
  width: 100vw;
  height: 100vh;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  display: flex;
  flex-wrap: wrap;


.hov-sq 
  width: 33.3333333vw;
  height: 50vh;
  z-index: 5000;


.c-1::after 
  /* other styling not relevant to issue */
  content: attr(data-content) '';
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="landing-hov-s">
  <div class="hov-sq">One</div>
  <div class="hov-sq">Two</div>
  <div class="hov-sq">Three</div>
  <div class="hov-sq">Four</div>
  <div class="hov-sq">Five</div>
  <div class="hov-sq">Six</div>
</div>
<div class="c-1">
  <h1>Laurent<br>&nbsp;&nbsp;&nbsp;Chevrette</h1>
</div>

【讨论】:

非常感谢,我已经坚持了几个小时了。【参考方案2】:

jQuery的索引方法

如果你使用 jQuery,you have access to the index() method。

我还添加了当鼠标位于悬停 div 的 out 时运行的函数。

也就是说,要小心你不能选择伪元素和 javascript,所以你应该使用 CSS 中的属性选择器来设置它们的样式,如下所示。

$('.hov-sq').hover(function() 
  $('.c-1')
    .attr('data-content', 'frontend developer')
    .attr('data-index', $(this).index());
  console.log($(this).index())
, function() 
  $('.c-1')
    .attr('data-content', '')
    .attr('data-index', '');
);
.landing-hov-s 
  width: 100vw;
  height: 100vh;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  display: flex;
  flex-wrap: wrap;


.hov-sq 
  width: 33.3333333vw;
  height: 50vh;
  z-index: 5000;


.c-1::after 
  /* other styling not relevant to issue */
  content: attr(data-content) '';


.c-1[data-index="0"]::after 
  /* Style for index 0 */



/* Rest of the styles */
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="landing-hov-s">
  <div class="hov-sq"></div>
  <div class="hov-sq"></div>
  <div class="hov-sq"></div>
  <div class="hov-sq"></div>
  <div class="hov-sq"></div>
  <div class="hov-sq"></div>
</div>

<div class="c-1">
  <h1>Laurent<br>&nbsp;&nbsp;&nbsp;Chevrette</h1>
</div>

【讨论】:

以上是关于如何迭代 HTML <div> 元素数组并为每个索引号设置不同的样式?的主要内容,如果未能解决你的问题,请参考以下文章

CSS中Flex布局控制每row的元素数量(没行3个)的问题

在单个包装器div中包装2个元素类型的每次迭代

如何将 localforage 迭代显示或映射到 html 元素 <p>

如何快速找到绝对定位子元素的相对定位 HTML 父元素?

如何计算 DOM 元素内的文本行数?我可以吗?

我如何通过媒体查询更改html元素的顺序?