https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector
使用前請詳閱說明:「The querySelector() method of the Element interface returns the first element that is a descendant of the element on which it is invoked that matches the specified group of selectors.」
你有兩個p,但是querySelector傳回的是第一個,也就是不在div裡面的那一個。DOM是一個物件樹,既使兩個p文字內容完全一樣,他在這個樹上還是兩個不同的物件。
你在兩個<p>
裡面,分別加上123-1
、123-2
你就會發現document.querySelector('p');
得到的是<p id="123" class="123">123-1</p>
也就是符合<p class="123">
當中的第一個DOM
在<div>
裡面的p是<p id="123" class="123">123-2</p>
因此contains得到的結果為false
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id="123" class="123">123-1</p>
<div id="id" class="class">
<p id="123" class="123">123-2</p>
</div>
</body>
<script>
const div = document.querySelector('div');
const p = document.querySelector('p');
console.log("div", div, div.innerHTML);
console.log("p", p, p.innerHTML);
console.log(div.contains(p));
</script>
</html>
輸出:
對,我就是這個意思。我知道變數p拿到的是-1的那個。
我問題是在兩個的內容完全一樣的情況下,是甚麼原因導致.contains()認為是false
我問題是在兩個的內容完全一樣的情況下
第二張圖,拿到的<p>
是 <div id="123" class="123">
裡面的 <p>
因此div.contains(p) 會是true
但是第一張圖,拿到的<p>
不是 <div id="123" class="123">
裡面的 <p>
因此div.contains(p) 會是false
這邊的div.contains(p)
指的是,檢查傳進去的<p>
,是否屬於div裡面的<p>
就算你把123-1和123-2刪掉,讓這兩個p是一模一樣
可是對div來說,這兩個仍是不同的DOM
那有方法可以看傳到.contains()的p的資料是怎樣的嗎?