首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript .closest返回null

JavaScript .closest返回null
EN

Stack Overflow用户
提问于 2019-08-23 02:31:17
回答 2查看 2.7K关注 0票数 2

我有以下简单的布局,我无法更改。我正在尝试使用JavaScript来获取最接近所按按钮的extra元素

在另一个问题的帮助下,我能够让preventDefault部分正常工作,但现在我正在与closest作斗争

代码语言:javascript
复制
<div class="buttons">
    <div class="button">
        <button class="myButton">Click Me</button>
        <div class="extra">64736</div>
    </div>
    <div class="button">
        <button class="myButton">Click Me</button>
        <div class="extra">5446</div>
    </div>
    <div class="button">
        <button class="myButton">Click Me</button>
        <div class="extra">78667</div>
    </div>
</div>

document.querySelector('.myButton').addEventListener('click', myFunction);

function myFunction() {

    event.preventDefault();

    close = this.closest(".extra"); 

    console.log(close)

}

但当我按下按钮时,这会给我null,我哪里错了?

EN

回答 2

Stack Overflow用户

发布于 2019-08-23 02:40:11

可以使用closestquerySelector的组合:

代码语言:javascript
复制
document.querySelectorAll('.myButton').forEach(function(button) {
  button.addEventListener('click', myFunction);
});

function myFunction(evt) {
  evt.preventDefault();

  var closest = evt.currentTarget.closest(".button").querySelector('.extra');

  console.log(closest)

}
代码语言:javascript
复制
<div class="buttons">
  <div class="button">
    <button class="myButton">Click Me</button>
    <div class="extra">64736</div>
  </div>
  <div class="button">
    <button class="myButton">Click Me</button>
    <div class="extra">5446</div>
  </div>
  <div class="button">
    <button class="myButton">Click Me</button>
    <div class="extra">78667</div>
  </div>
</div>

更多信息:

票数 2
EN

Stack Overflow用户

发布于 2019-08-23 02:55:07

.closest遍历dom,不查看兄弟元素或子元素。在@MaartenDev的回答中,他使用.closest提升了一个级别,并针对按钮的父div。然后,他链接queryselector以返回到子类中,并使用.extra类进行选择。另一种解决方案是使用.nextElementSibling,这样您就不必升级和后退。只有当您的html元素是直接兄弟元素,并且您尝试以此为目标的项目跟在您调用nextElementSibling的元素之后时,这才会起作用。

这里有一个这样的例子。

代码语言:javascript
复制
document.querySelectorAll('.myButton').forEach(function(button){
  button.addEventListener('click',myFunction);
})
function myFunction() {
  
  event.preventDefault();
  
  var closest = this.nextElementSibling;
  
  console.log(closest);

}
代码语言:javascript
复制
<div class="buttons">
    <div class="button">
        <button class="myButton">Click Me</button>
        <div class="extra">64736</div>
    </div>
    <div class="button">
        <button class="myButton">Click Me</button>
        <div class="extra">5446</div>
    </div>
    <div class="button">
        <button class="myButton">Click Me</button>
        <div class="extra">78667</div>
    </div>
</div>

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

https://stackoverflow.com/questions/57615247

复制
相关文章

相似问题

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