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的資料是怎樣的嗎?