ฉันจะกำหนดประเภทขององค์ประกอบ HTML ใน JavaScript ได้อย่างไร


191

ฉันต้องการวิธีกำหนดประเภทขององค์ประกอบ HTML ใน JavaScript มันมี ID แต่องค์ประกอบเองอาจเป็น a <div>, <form>field, a <fieldset>, ฯลฯ ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


290

nodeNameเป็นแอตทริบิวต์ที่คุณกำลังมองหา ตัวอย่างเช่น:

var elt = document.getElementById('foo');
console.log(elt.nodeName);

โปรดทราบว่าnodeNameส่งคืนชื่อองค์ประกอบที่เป็นตัวพิมพ์ใหญ่และไม่มีวงเล็บเหลี่ยมซึ่งหมายความว่าหากคุณต้องการตรวจสอบว่าองค์ประกอบเป็น<div>องค์ประกอบคุณสามารถทำได้ดังนี้:

elt.nodeName == "DIV"

ในขณะนี้จะไม่ให้ผลลัพธ์ที่คุณคาดหวัง:

elt.nodeName == "<div>"

29
ฉันขอแนะนำให้ทำเช่นนี้: ถ้า (elt.nodeName.toLowerCase () === "div") {... } ด้วยวิธีนี้ถ้าด้วยเหตุผลบางอย่างมันจะไม่ถูกส่งคืนด้วยตัวอักษรตัวพิมพ์ใหญ่ (ตัวพิมพ์เล็กหรือผสม) คุณ ไม่ต้องเปลี่ยนและรหัสนี้จะยังใช้งานได้
TheCuBeMan

6
ในการตอบสนองต่อ @TheCuBeMan การใช้ toLowerCase () หมายความว่าคุณต้องตรวจสอบให้แน่ใจว่า nodeName มีอยู่ (หากเป็นไปได้ทั้งหมด elt ที่เป็นไปได้ไม่ได้ในความเป็นจริงองค์ประกอบ):if (elt.nodeName && elt.nodeName.toLowerCase() === 'div') { ... }
Erik Koopmans

แล้วlocalNameไงล่ะ
bomba

46

เกี่ยวกับelement.tagNameอะไร

ดูเพิ่มเติมtagNameเอกสารบน MDN


4
ตามเวลาที่คุณตีฉันน้อยกว่า 1 วินาที!
เปลือกตา

27
จาก QuirksMode: คำแนะนำของฉันคือไม่ใช้ tagName เลย nodeName มีฟังก์ชันการทำงานทั้งหมดของ tagName รวมทั้งอีกไม่กี่ ดังนั้น nodeName เป็นตัวเลือกที่ดีกว่าเสมอ
bdukes

7

บางครั้งคุณต้องการ element.constructor.name

document.createElement('div').constructor.name
// HTMLDivElement

document.createElement('a').constructor.name
// HTMLAnchorElement

document.createElement('foo').constructor.name
// HTMLUnknownElement

7

คุณสามารถใช้การตรวจสอบรหัสทั่วไปผ่านทางinstanceof:

var e = document.getElementById('#my-element');
if (e instanceof HTMLInputElement) {}         // <input>
elseif (e instanceof HTMLSelectElement) {}    // <select>
elseif (e instanceof HTMLTextAreaElement) {}  // <textarea>
elseif (  ... ) {}                            // any interface

ดูที่นี่สำหรับรายการอินเตอร์เฟสทั้งหมด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.