อะไรคือความแตกต่างระหว่าง$('this')[0].nodeName
และ$('this')[0].tagName
?
อะไรคือความแตกต่างระหว่าง$('this')[0].nodeName
และ$('this')[0].tagName
?
คำตอบ:
tagName
คุณสมบัติที่มีความหมายเฉพาะสำหรับโหนดองค์ประกอบ (พิมพ์ 1 โหนด) เพื่อให้ได้ชนิดขององค์ประกอบ
มีโหนดประเภทอื่น ๆเช่นกัน (ความคิดเห็นแอตทริบิวต์ข้อความ ฯลฯ ) จะได้รับชื่อใด ๆ ของประเภทโหนดต่างๆที่คุณสามารถใช้คุณสมบัติnodeName
เมื่อใช้nodeName
กับโหนดองค์ประกอบที่คุณจะได้รับชื่อแท็กของตนเพื่อให้ทั้งสามารถนำมาใช้จริงๆแม้ว่าคุณจะได้รับความสอดคล้องที่ดีระหว่างเบราว์เซอร์nodeName
เมื่อใช้
นี่เป็นคำอธิบายที่ดีเกี่ยวกับความแตกต่างระหว่างทั้งสอง
เพิ่มข้อความจากบทความ:
tagName
และnodeName
เป็นคุณสมบัติ Javascript ที่มีประโยชน์สำหรับการตรวจสอบชื่อขององค์ประกอบ html สำหรับวัตถุประสงค์ส่วนใหญ่อาจทำได้ดี แต่ควรใช้ nodeName หากคุณสนับสนุนเฉพาะเบราว์เซอร์เกรด A และต้องการให้ใช้ tagName หากคุณตั้งใจจะสนับสนุน IE5.5 ด้วยมีสองประเด็นเกี่ยวกับ
tagName
:
- ใน IE ทุกเวอร์ชัน tagName จะส่งกลับ
!
เมื่อเรียกบนโหนดข้อคิดเห็น- สำหรับโหนดข้อความ tagName จะส่งกลับ
undefined
ในขณะที่ nodeName ส่งกลับ#text
nodeName
มีชุดปัญหาของตัวเองแต่มีความรุนแรงน้อยกว่า:
- IE 5.5 จะส่งกลับ
!
เมื่อเรียกบนโหนดข้อคิดเห็น สิ่งนี้เป็นอันตรายน้อยกว่า tagName ซึ่งได้รับผลกระทบจากพฤติกรรมนี้ใน IE ทุกเวอร์ชัน- IE 5.5 ไม่รองรับ nodeName สำหรับ
document
องค์ประกอบหรือแอตทริบิวต์ สิ่งเหล่านี้ไม่ควรเป็นข้อกังวลสำหรับวัตถุประสงค์ในทางปฏิบัติส่วนใหญ่ แต่ควรคำนึงถึงไม่ว่าในกรณีใด ๆ- Konqueror ละเว้นโหนดข้อคิดเห็นเมื่อใช้คุณสมบัตินี้ แต่แล้วอีกครั้ง Konqueror พร้อมกับ IE 5.5 ไม่ใช่เบราว์เซอร์เกรด A
ดังนั้นเพื่อวัตถุประสงค์ในทางปฏิบัติส่วนใหญ่จะยึดติดกับ
nodeName
เนื่องจากการรองรับสถานการณ์ที่หลากหลายและอาจเข้ากันได้ดีขึ้นในอนาคต ไม่ต้องพูดถึงว่าจะไม่เกิดอาการสะอึกบนโหนดความคิดเห็นซึ่งมีแนวโน้มที่จะเล็ดลอดเข้าไปในโค้ดโดยไม่ได้แจ้งเตือน ไม่ต้องกังวลกับ IE 5.5 หรือ Konqueror เนื่องจากส่วนแบ่งการตลาดอยู่ใกล้ 0%
อ่านเกี่ยวกับคุณสมบัติเหล่านั้นในข้อมูลจำเพาะ DOM Core
nodeName
เป็นคุณสมบัติที่กำหนดในอินเทอร์เฟซ Node
http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-F68D095
tagName
เป็นคุณสมบัติที่กำหนดไว้ในอินเทอร์เฟซองค์ประกอบ
http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-104682815
btw อินเทอร์เฟซโหนดถูกนำไปใช้โดยทุกโหนดในทรี DOM (รวมถึงdocument
อ็อบเจ็กต์เอง) อินเทอร์เฟซองค์ประกอบถูกใช้งานโดยโหนดเหล่านั้นในโครงสร้าง DOM ที่แสดงถึงองค์ประกอบในเอกสาร HTML เท่านั้น (โหนดที่มีnodeType
=== 1)
และนี่คือสิ่งที่เกิดขึ้นใน Firefox 33 และ Chrome 38:
HTML:
<div class="a">a</div>
Js:
node = e
node.nodeType === 1
node.nodeName === 'DIV'
node.tagName === 'DIV'
node = e.getAttributeNode('class')
node.nodeType === 2
node.nodeName === 'class'
node.tagName === undefined
node = e.childNodes[0]
node.nodeType === 3
node.nodeName === '#text'
node.tagName === undefined
ดังนั้น:
nodeType
เพื่อรับประเภทโหนดเท่านั้น: nodeName
แบ่งสำหรับnodeType === 1
tagName
สำหรับnodeType === 1
nodeName
แตกเพื่อnodeType === 1
" อย่างไร?
The read-only Node.nodeType property is an integer that identifies what the node is.
หรือไม่?
elem
?) แต่เป็น เหมือนกันtagName
ซึ่งแตกต่างกันไปสำหรับแต่ละองค์ประกอบ ดังนั้นคุณน่าจะต้องการใช้nodeType
เพื่อตรวจหาประเภทโหนดและtagName
ชื่อแท็กเสมอ