VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1563|回复: 3

DOM子节点比较问题?

[复制链接]

2

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-12-25 10:00:01 | 显示全部楼层 |阅读模式
<html>
<head><title>Test</title>
<script type="text/javascript">
function nodecheck(parentNode,childNode)
{
        var childs=parentNode.childNodes;
        for(var i=0;i<childs.length;i++)
        {
                if(childs[i]==childNode)
                return true;
                if(childs[i].hasChildNodes())
                nodecheck(childs[i],childNode);
        }
        return false;
}
var testfun=function()
{
        var e1=document.getElementById('ROOT');
        var e2=document.getElementById('A');
        alert(nodecheck(e1,e2));
}
</script>
</head>
<body onload="testfun();">
<div id="ROOT">
        <div id="A">
                <div id="AA">
                        <div id="AAA">
                                Hello
                        </div>
                </div>
        </div>
        <div id="B">
                <p id="BA">
                        <input id="BAA" type="text" />
                </p>
                <p id="BB">
                        <input id="BBA" type="button" value="lala" />
                </p>
        </div>
        <div id="C">
                        <select id="CA">
                                <option id="CAA">1</option>
                                <option id="CAB">2</option>
                                <option id="CAC">3</option>
                        </select>
        </div>
</div>
</body>
</html>
==============================================================
目的:输入一个节点A,再输入一个节点B,判断B节点是否是A节点的子节点
是返回true  否返回false

        var e1=document.getElementById('ROOT');
        var e2=document.getElementById('A');
返回true  A是ROOT的子节点

        var e1=document.getElementById('ROOT');
        var e2=document.getElementById('AA');

为什么返回false?
是这个比较判断 childs[i]==childNode  出现问题了么?
回复

使用道具 举报

0

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-12-25 11:15:01 | 显示全部楼层
用遍历吧
判断B是否是A的子节点

function isChild(A,B){
    for(var i=0;i<A.childNodes.length;i++){
        if(A.childNodes[i]==B){
            return true;
        }
    }
    return false;
}
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-12-25 11:30:01 | 显示全部楼层
var testfun = function()
       {
            var e1 = document.getElementById('ROOT');
            var e2 = document.getElementById('A');
            while (e2.parentNode) {
                if (e2 == e1)
                    return true;
                e2 = e2.parentNode;
            }
            return false;
        }
这样判断比较简单咯
回复

使用道具 举报

2

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-12-25 11:45:01 | 显示全部楼层
反向判断。好办法啊,把1对多,变成了1对1。不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表