【问题标题】:How do I get the last element child for every item in an array如何获取数组中每个项目的最后一个元素子元素
【发布时间】:2019-10-19 22:41:31
【问题描述】:

所以我需要做的是获取数组中每个项目的最后一个子元素。

function myDropdown() {
  var x = document.getElementsByClassName('sub-menu-wrap')[0].lastElementChild
  if (x.style.display === "none") {
    x.style.display = "block";
  } else {
    x.style.display = "none";
  }
}

我知道这行得通:

document.getElementsByClassName('sub-menu-wrap')[0].lastElementChild

但是我不需要定义数组中的哪个项目,我希望它使用它来动态抓取数组中的每个项目并为它们获取.lastElementChild。

只是为了添加这个,我需要这个函数作为 onclick 工作,并且只在被点击时应用于任何项目

希望有人能帮忙!

【问题讨论】:

  • 使用 CSS 规则并让浏览器完成这项工作会容易得多。
  • @Pointy 可能是对的,但知道答案仍然是一个重要的问题

标签: javascript arrays wordpress foreach menu


【解决方案1】:
var arr = Array.from(document.getElementsByClassName('sub-menu-wrap'));
for (let el of arr) {
    var x = el.lastElementChild;
    /// do what you want to x here
}

实际上,如果您正在使用 for..of..,我认为您不需要使用 Array.from 将其转换为数组,但如果您正在使用 arr.forEach(),您会这样做

【讨论】:

  • 感谢您的快速回复谢谢!它有效,但现在唯一的问题是它适用于所有类,而不仅仅是我点击的那个,有什么方法可以让它只适用于你点击的那些?
  • 这超出了您原始问题的范围,我对上下文的了解不足,无法为您提供答案。您必须提出一个新问题并详细说明您希望发生的具体情况。
  • 你认为有可能吗?
  • 我 100% 确定您想要什么是可能的,但您只需要更准确地描述您想要什么。
  • 确定我在这里开了新票stackoverflow.com/questions/56444760/…
【解决方案2】:

试试这样。获取 sub-menu-wrap 类的数组并循环它并隐藏/显示您的最后一个子元素

function myDropdown() {

  var array = Array.from(document.getElementsByClassName('sub-menu-wrap'));
for (let data of array) {
    var x = data.lastElementChild;
    if (x.style.display === "none") {
      x.style.display = "block";
    } else {
       x.style.display = "none";
    }
}

  
}

myDropdown()
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="sub-menu-wrap">
  <div>hi1</div>
  <div>hi2</div>
  <div>hi3</div>
</div>

<div class="sub-menu-wrap">
  <div>hi1</div>
  <div>hi2</div>
  <div style="display:none">hi3</div>
</div>

如果要隐藏最后一个子元素被点击的元素

function hideLast(e) {


    var x = e.lastElementChild;
    if (x.style.display === "none") {
      x.style.display = "block";
    } else {
       x.style.display = "none";
    }


  
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="sub-menu-wrap" onclick="hideLast(this)">
  <div>hi1</div>
  <div>hi2</div>
  <div>hi3</div>
</div>

<div class="sub-menu-wrap" onclick="hideLast(this)">
  <div>hi1</div>
  <div>hi2</div>
  <div style="display:none">hi3</div>
</div>

【讨论】:

  • 感谢您的快速回复谢谢!不幸的是和另一个一样,它可以工作,但现在唯一的问题是它适用于所有类,而不仅仅是我点击的那个,有什么方法让它只适用于你点击的那些?
  • 不确定我是否添加错了,但我最好解释一下我需要做什么。所以如果你去这里并打开顶部的第三个菜单staging.information-age.com。你可以看到当你按下菜单时它们都打开了,但我只希望它们在被特别点击时打开。这可能吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 2014-03-11
  • 2021-09-28
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
相关资源
最近更新 更多