簡體   English   中英

為什么不能像document.body一樣通過標記名稱選擇元素對象?

[英]Why can't element objects be selected by tag name just like document.body?

對於某些人來說這可能是一個愚蠢的問題,但我很好奇,為什么document.body.p不起作用,而document.body起作用,而不是使用document.body.getElementById('mypara')

document.body我們通過其tagName: body引用了body,所以為什么document.body.p不起作用。

謝謝

因為可以保證文檔中只有一個正文(至少理想情況下)。 當您執行document.body.p ,不能保證document.body.p中只有一個p元素。 如果存在多個p,應該返回哪個p元素? 沒有權利。


來自評論的問題:

但是然后(理想情況下)也只有一個html元素,但是沒有document.html。 對??

是的,有。

Document.documentElement 

返回作為文檔直接子元素的Element。 對於HTML文檔,通常是元素。

https://developer.mozilla.org/en/docs/Web/API/Document

注意documentElement是只讀的。

document.body返回對網頁的body元素的引用。 該元素可能是其他元素(稱為子元素)的父元素。 在這種情況下,第一個孩子是段落元素,代碼通過將零索引應用於孩子來讀取代碼,如下所示:

 console.log(document.body.children[0]); console.log(document.body.children[0].textContent); 
 <body> <p>text</p> 

如果您想閱讀該段落的內容,則只需引用其“ textContent”或“ innerText”即可。

因為document是具有此處列出的屬性的HTMLDocument對象,而這些屬性之一是body ,它是HTMLElement的實例。 您可以在瀏覽器的控制台中嘗試以下操作:

  • document instanceof HTMLElement將返回false
  • document instanceof HTMLDocument將返回true
  • document.body instanceof HTMLElement將返回true

所以現在我們知道documentdocument.body是不同類型的對象。 您可以在上面的鏈接中瀏覽Mozilla的文檔,以查看每種對象類型上可用的屬性和方法。 例如, getElementById僅可用於document ,而getElementsByTagName可用於任何Element對象,例如bodyElement接口是HTMLElement的父級,因此HTMLElement也將具有Element可用的方法)。

如果允許像屬性那樣訪問所有標記名,例如document.body.p ,則可能出現的問題是命名沖突。 document.body.style返回CSSStyleDeclaration ,但是如果按照您的建議將style視為標記名,則必須返回<style>元素的HTMLCollection (盡管從技術上講,主體中具有<style>元素是無效的,但瀏覽器仍將對其進行解析。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM