js有个contains的方法来判断是否为子节点
我想问下这个是怎么实现的呢?
原理是什么呢?
<div class="first">
<div class="first-child"></div>
</div>
<div class="second">
<div class="second-child">
<div class="second-child-child"></div>
</div>
</div>
<script type="text/javascript">
var a = document.querySelector('.first-child');
var b = document.querySelector('.second-child-child');
var c = document.querySelector('.first');
var d = document.querySelector('.second');
function isChildOf(child, parent) {
var parentNode;
if(child && parent) {
parentNode = child.parentNode;
while(parentNode) {
if(parent === parentNode) {
return true;
}
parentNode = parentNode.parentNode;
}
}
return false;
}
console.log(isChildOf(a, b));
console.log(isChildOf(b, d));
console.log(isChildOf(a, c));
</script>
<div class="parent">
<div class="child"></div>
</div>
console.log(document.querySelector(".parent").querySelector(".child"))
child存在时有值,不存在值是null,判断这个就行了
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.center {
display: flex;
justify-content: center;
align-items: center;
}
.main {
width: 300px;
height: 300px;
background: red;
}
.con {
width: 200px;
height: 200px;
background: green;
}
.text {
width: 100px;
height: 100px;
background: yellow;
}
</style>
</head>
<body>
<div class="main center">
<div class="con center">
<span class="text center">测试</span>
</div>
</div>
<script type="text/javascript">
var main = document.querySelector(".main");
var con = document.querySelector(".con");
var text = document.querySelector(".text");
text.addEventListener("click", function(e) {
console.log(main.contains(e.target));
console.log(con.contains(e.target));
console.log(main.contains(con));
console.log(con.contains(main));
})
console.log(isChildOf(con, main));
console.log(isChildOf(text, main));
console.log(isChildOf(main, con));
function isChildOf(child, parent) {
var parentNode;
if(child && parent) {
parentNode = child.parentNode;
while(parentNode) {
if(parent === parentNode) {
return true;
}
parentNode = parentNode.parentNode;
}
}
return false;
}
</script>
</body>
</html>
https://developer.mozilla.org...
官方文档
function isInPage(node) {
return (node === document.body) ? false : document.body.contains(node);
}
和一楼一样
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
contains
自带方法,判断一个元是不是另一个元的子集