为了账号安全,请及时绑定邮箱和手机立即绑定

JS面试题:写一个方法,传入一个DOM元素,找到它所有祖先元素中div的个数,并返回。

JS面试题:写一个方法,传入一个DOM元素,找到它所有祖先元素中div的个数,并返回。

lxfawh 2017-05-10 18:18:09
我的思路是使用递归,一层层往上找。判断元素名是DIV就返回。下面是我写的一部分,但实现不了。求大神帮忙。function findDiv(dom) {        var result = [];        var parents = dom.parentNode;        if (parents.nodeName.toUpperCase() === "BODY") {            return;        } else if (parents.nodeName.toUpperCase() === "DIV") {            result.push(parents.nodeName);        }        // console.log(result);        return result;    }
查看完整描述

1 回答

已采纳
?
千秋此意

TA贡献158条经验 获得超187个赞

function findDiv(node) {
    var result = [];
    
    while ((node = node.parentNode, node) !== null) {
        if (node.nodeName.toUpperCase() === 'DIV') {
            result.push(node);
        }
    }
    
    return result;
}

加个循环上就行了


-----  补充下,才发现你好像是要用递归写  -----

function findDiv(node, result) {
    var result = result || [];
    var parent = node.parentNode;
    if (parent === null) {
        return result;
    } else {
        return findDiv(parent, ((parent.nodeName.toUpperCase() === 'DIV') ? result.concat([parent]) : result));
    }
}


查看完整回答
3 反对 回复 2017-05-10
  • lxfawh
    lxfawh
    请问这一行怎么解释?while ((node = node.parentNode, node) !== null)
  • 千秋此意
    千秋此意
    每次循环时 让node = node.parentNode, 同时判断node是否为null, 不为null时继续循环
  • lxfawh
    lxfawh
    太赞了!谢谢
点击展开后面1
  • 1 回答
  • 1 关注
  • 2845 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信