首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展div时出错

扩展div时出错
EN

Stack Overflow用户
提问于 2016-11-14 03:23:33
回答 2查看 53关注 0票数 0

我遇到了一个关于可扩展div的问题。下面是我的代码:

HTML:

代码语言:javascript
复制
<div><a href="javascript:showHide('expand');">more...</a></div>
<div class="expand" style="display:none">
  YO DAWgGG
</div>

JS:

代码语言:javascript
复制
<script type="text/javascript" charset="utf-8">
  function showHide(elementid){
    if (document.getElementsByClassName("expand").style.display == 'none'){
      document.getElementsByClassName("expand").style.display = '';
    } else {
      document.getElementsByClassName("expand").style.display = 'none';
    }
  }
  </script>

它说扩展是未定义的。但我不明白为什么。我做错了什么?如果我使用一个ID,同样的代码也可以工作,但是我需要在多个div中使用它。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-11-14 03:26:54

getElementsByClassName返回一个object数组时,您需要执行document.getElementsByClassName("expand")[0]

代码语言:javascript
复制
function showHide(el){
    if (document.getElementsByClassName(el)[0].style.display == 'none'){
      document.getElementsByClassName(el)[0].style.display = '';
    } else {
      document.getElementsByClassName(el)[0].style.display = 'none';
    }
  }
代码语言:javascript
复制
<div><a href="javascript:showHide('expand');">more...</a></div>
<div class="expand" style="display:none">
  YO DAWgGG
</div>

基于现有的标记。我建议使用document.querySelectorAll,而不是设置元素样式,切换它的类。

代码语言:javascript
复制
var links = document.querySelectorAll('.link');
for (var i=0; i<links.length; i++) {
  links[i].addEventListener('click', function(e){
    e.target.parentElement.nextElementSibling.classList.toggle('show');
  })
}
代码语言:javascript
复制
.expand {
  display: none;
}

.expand.show {
  display: block;
}
代码语言:javascript
复制
<div><a class="link" href="#">more...</a></div>
<div class="expand">
  YO DAWgGG 1111
</div>


<div><a class="link" href="#">more...</a></div>
<div class="expand">
  YO DAWgGG 222
</div>


<div><a class="link" href="#">more...</a></div>
<div class="expand">
  YO DAWgGG 333
</div>

票数 1
EN

Stack Overflow用户

发布于 2016-11-14 03:33:05

document.getElementsByClassName返回一个HTMLCollection,而不是HTMLElement,因此你不能在集合上使用.style。

因此,如果需要在集合的所有元素上应用一些样式,则需要迭代并应用。

这是你可以做的。

代码语言:javascript
复制
document.addEventListener('DOMContentLoaded', function() {
  let anchors = document.querySelectorAll(".more");

  [].forEach.call(anchors, (anchor) => {
    anchor.addEventListener("click", (event) => {
      event.preventDefault();
      let parent = event.target.parentNode;
      let ele = parent.querySelector(".expand");
      if (ele.style.display == 'none') {
        ele.style.display = '';
      } else {
        ele.style.display = 'none';
      }
    })
  })
});
代码语言:javascript
复制
<div><a class="more" href="#">more...</a>
  <div class="expand" style="display:none">
    YO DAWgGG
  </div>
</div>
<div><a class="more" href="#">more-2-...</a>
  <div class="expand" style="display:none">
    YO DAWgGG-2
  </div>
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40577884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档