首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查某个parentNodes中是否有某个类的优雅方法

检查某个parentNodes中是否有某个类的优雅方法
EN

Stack Overflow用户
提问于 2019-03-17 12:40:52
回答 3查看 39关注 0票数 1

我有一个菜单,可以在悬停时展开和收缩。问题是菜单有很多元素,为了触发我的展开函数,我需要编写如下所示的内容。我的实际代码包含了更多的代码,我想知道是否会有更好的方法来做到这一点。

代码语言:javascript
复制
var e = event.target

if(
e.parentNode.className.split(" ")[0] === "main-section" ||
e.parentNode.parentNode.className.split(" ")[0] === "main-section" ||
e.parentNode.parentNode.parentNode.className.split(" ")[0] === "main-section"){
//do somehtings}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-17 12:43:08

在现代环境中,您可以使用DOM的closest方法:

代码语言:javascript
复制
if (e.closest(".main-section")) {
    // One was found...
}

它查看当前元素,看看它是否匹配选择器,然后它的父元素,然后它的父元素,等等。它返回它找到的元素,如果找不到,则返回null

对于稍微老一点的环境,Element#closest可以多填充。或者,如果您不喜欢填充,您可以为自己提供一个实用程序函数,如果它存在,可以使用closest,如果没有,可以使用matches

代码语言:javascript
复制
function closest(el, selector) {
    if (el.closest) {
        return el.closest(selector);
    }
    var matches = el.matches || el.matchesSelector;
    while (el) {
        if (matches.call(el, selector)) {
            return el;
        }
        el = el.parentNode;
    }
    return null;
}

你会用这样的...which:

代码语言:javascript
复制
if (closest(e, ".main-section")) {
    // One was found...
}
票数 4
EN

Stack Overflow用户

发布于 2019-03-17 12:45:30

方法closest()在某些浏览器中不受支持,因此我从这个回答中为您获取了这个函数。

代码语言:javascript
复制
function findAncestor (el, sel) {
    while ((el = el.parentElement) && !((el.matches || el.matchesSelector).call(el,sel)));
    return el;
}
票数 0
EN

Stack Overflow用户

发布于 2019-03-17 12:46:30

classList与类似的递归函数一起使用。

代码语言:javascript
复制
const start = document.getElementById("start");

function recursiveCheck(ele, className, limit = 3, current = 0){
   return ele.classList.contains(className) ? true : current >= limit ? false : recursiveCheck(ele.parentNode, className, limit, current + 1);
}

console.log(
  recursiveCheck(start, "test")
);
代码语言:javascript
复制
<div class="test">
  <div>
    <div id="start"><div>
  </div>
</div>

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

https://stackoverflow.com/questions/55207155

复制
相关文章

相似问题

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