Javascript 以父节点3级为目标的更好方法?

Javascript 以父节点3级为目标的更好方法?,javascript,Javascript,我目前有一个工作变量,目标是3级以上的父节点 searchClearSelector:'.search-form\uuu clear',//我输入的内容上的清除按钮 //检查输入中是否有要清除的值,然后调用函数 self.\u ClearActions=document.querySelectorAll(self.searchClearSelector); if(self.\u ClearActions&&self.\u ClearActions.length>0){ 用于(自我的持续行为){

我目前有一个工作变量,目标是3级以上的父节点

searchClearSelector:'.search-form\uuu clear',//我输入的内容上的清除按钮
//检查输入中是否有要清除的值,然后调用函数
self.\u ClearActions=document.querySelectorAll(self.searchClearSelector);
if(self.\u ClearActions&&self.\u ClearActions.length>0){
用于(自我的持续行为){
_Action.addEventListener('click',self.ClearActionHandler);
}
}
//清晰功能
ClearActionHandler(){
const self=这个;
常量句柄=此;
const\u HandleParent=parentNode.parentNode.parentNode;
const_SearchInput=_HandleParent.querySelector('.search-form_uinput');
}

清楚的

您可以使用递归函数:

函数(元素、级别){
if(levels==1)返回element.parentNode | |元素;
if(电平<1)返回元件;
返回upperParents(element.parentNode | | element,levels-1);
}
document.getElementById('btnwithparents')。addEventListener('click',function()){
console.log(大写父级(this,2));
});

搜索我的父母2级以上

您可以实现如下功能:

const _HandleParent = parentsUntil(3, this); // 3rd parent

const parentsUntil = (num, elem) => {
   if(num <= 0) return;
   let node = elem;
   while(num--) node = node.parentNode;
   return node;
}
const\u HandleParent=parentsUntil(3,this);//第三家长
常量parentsUntil=(num,elem)=>{

if(num您可以在
的同时执行
循环

  var node = document.getElementById("id");
  var levels = 3;
  while (levels >= 0) {
      node = node.parentNode;
      levels--;
  }

每个人都给出了解决方案,下面是另一个:

function getUpstream(el,lvl){
    if(!(el instanceof Node)){
        throw("Not a node!");
    }
    while((--lvl>=0)&&el){
        el = el.parentNode;
    }
    return el;
}

getUpstream(document.body,1)

如果不查看您的元素结构,很难说。对于此类问题,我们需要查看您选择的元素(以及此
是什么);为此,我们需要查看您的HTML和JavaScript,您在其中确定
。这是最好的解决方案,您可以尝试将类赋予第三个父级,并像这样访问。最近(“.class_name”)我必须这样做的原因是,IE(最近)不支持它更重要的是绕过IE修复我刚刚修复了第一个
if
。对此很抱歉(我最近一直在与delphi合作,有时会感到困惑)