Bisakah elemen html memiliki beberapa id?

310

Saya mengerti bahwa id harus unik dalam halaman HTML / XHTML.

Pertanyaan saya adalah, untuk elemen tertentu, dapatkah saya menetapkan beberapa id?

<div id="nested_element_123 task_123"></div>

Saya menyadari bahwa saya memiliki solusi yang mudah dengan hanya menggunakan kelas. Saya hanya ingin tahu tentang menggunakan id dengan cara ini.

webmat
sumber
Saya memprogram hampir untuk sementara waktu di html css dan js. Saya sering memiliki kebutuhan untuk menggunakan beberapa kelas tapi saya benar-benar tidak pernah menggunakan dan saya memiliki kebutuhan untuk menggunakan beberapa ID. Namun demikian saya agak penasaran: bolehkah saya bertanya apa situasi yang Anda hadapi dalam kesempatan seperti itu untuk membutuhkan banyak ID?
willy wonka
Dalam skenario langka ketika seseorang tidak memiliki akses ke HTML sumber (misalnya saat membangun proxy) jika Anda perlu menargetkan elemen yang memiliki beberapa id, pemilih css [id = "satu dua tiga" '] harus menargetkan elemen tersebut.
JisuKim82
Ini sangat tergantung pada spesifikasi yang dikutip (dan kemungkinan diterapkan) dan konteks di dalamnya. yaitu w3.org/TR/html5/dom.html#the-id-attribute dan yang lebih lama yang menunjukkan "ya"? w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attribute
Mark Schultheiss
1
@willywonka Saya tahu ini seperti 2+ tahun kemudian, tapi saya menemukan artikel ini sekarang mencari jawaban untuk ini, dan merasa seperti berbagi skenario dengan Anda saya temui, karena Anda tidak pernah mendapat jawaban. Saya sedang mengerjakan proyek untuk freecodecamp untuk membuat kalkulator JS. Mereka ingin id untuk output menjadi "display" sehingga mereka dapat menjalankan tes mereka terhadapnya tetapi saya membuat kalkulator ilmiah dengan 2 layar: #input dan #output, sehingga tampilan #input JUGA membutuhkan "tampilan" id nilai selain nilai "input" Saya ingin memberikannya untuk konsistensi.
Tara Stahler
1
Hai @TaraStahler Anda dipersilakan. Sejauh yang saya tahu browser hanya akan membuat yang pertama jika Anda menggunakan notasi <... id = "input" id = "display" ...> dan juga id tidak boleh berisi spasi putih (atau tab) jadi notasi <... id = "input display" ...> tidak valid sama sekali. Hanya bereksperimen dengan javascript dengan konsol Chrome dan mengembalikan "Uncaught ReferenceError: tampilan tidak ditentukan" dalam kedua kasus. Hanya case pertama yang mengembalikan objek jika saya mendapatkannya dengan id pertama, yang kedua tidak dapat dicapai. Dalam kasus kedua tidak ada id yang dapat dicapai. Mungkin Anda perlu memperbaiki kode Anda?
willy wonka

Jawaban:

205

Tidak. Dari XHTML 1.0 Spec

Dalam XML, pengidentifikasi fragmen adalah tipe ID, dan hanya ada atribut tunggal tipe ID per elemen. Oleh karena itu, dalam XHTML 1.0 atribut id didefinisikan sebagai tipe ID. Untuk memastikan bahwa dokumen XHTML 1.0 adalah dokumen XML yang terstruktur dengan baik, dokumen XHTML 1.0 HARUS menggunakan atribut id ketika mendefinisikan pengidentifikasi fragmen pada elemen yang tercantum di atas. Lihat Pedoman Kompatibilitas HTML untuk informasi tentang memastikan jangkar tersebut kompatibel mundur saat menyajikan dokumen XHTML sebagai teks tipe media / html.

timmow
sumber
7
"Pengidentifikasi fragmen adalah tipe ID, dan hanya ada atribut tunggal tipe ID per elemen." Dikatakan di sini, atribut dan atribut tunggal berbeda dari nilai atribut. Itu tidak mengatakan apa pun yang nilai atribut tidak boleh dalam konteks apa pun mengasumsikan multinilai baik melalui pemisahan ruang atau pemisahan karakter. Meskipun dalam spesifikasi dikatakan bahwa untuk kompatibilitas ke belakang tidak boleh mengandung karakter spasi dalam nilai atribut Fragment Identifiers (w3.org/TR/xhtml1/#guidelines) Jadi, jika Anda ingin mengekspresikan ID
multinilai,
2
Tergantung pada spesifikasi yang Anda kutip. "Spesifikasi ini tidak menghalangi elemen yang memiliki banyak ID ..." w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attribute
Mark Schultheiss
Lihat di sini di mana kalimat itu dihapus w3.org/TR/html5/dom.html#the-id-attribute
Mark Schultheiss
Oke, saya membuat jawaban ini mencapai tanda 200 upvote. Tidak apa-apa. Saya melihat diri saya keluar.
KhoPhi
196

Bertentangan dengan apa yang orang lain katakan, jawaban yang benar adalah YA

Spesifikasi Selectors sangat jelas tentang ini:

Jika suatu elemen memiliki beberapa atribut ID, semuanya harus diperlakukan sebagai ID untuk elemen tersebut untuk keperluan pemilih ID. Seperti situasi yang dapat dicapai menggunakan campuran xml: id, DOM3 Core, XML DTDs, dan namespace-specific pengetahuan.


Edit

Hanya untuk memperjelas: Ya, elemen XHTML dapat memiliki beberapa id, mis

<p id="foo" xml:id="bar">

tetapi menetapkan beberapa id ke idatribut yang sama menggunakan daftar yang dipisahkan ruang tidak mungkin.

pengguna123444555621
sumber
7
Jawaban yang bagus - sekarang letakkan kucing di antara merpati.
TrojanName
3
Sayangnya itu bukan spesifikasi CSS yang berlaku di sini. Untuk HTML / XHTML, Anda harus melihat spec itu dan spec di sana jelas mengatakan bahwa setiap elemen dapat memiliki paling banyak satu id dan id itu harus unik pada halaman: w3.org/TR/html401/struct/global. html # h-7.5.2 (untuk HTML 4)
tvanfosson
9
@tvanfosson: Anehnya, spesifikasi HTML4 TIDAK mengatakan bahwa setiap elemen dapat memiliki paling banyak satu id. Jika Anda melihat spesifikasi HTML5 , Anda bahkan akan menemukan This specification doesn't preclude an element having multiple IDs, if other mechanisms (e.g. DOM Core methods) can set an element's ID in a way that doesn't conflict with the id attribute.(yang sesuai dengan spesifikasi CSS)
user123444555621
1
Anda hanya dapat memiliki satu atribut id dan format konten atribut id tidak memiliki spasi. Dalam konteks pertanyaan - memberikan id elemen 2 "HTML" - tidak mungkin melakukannya dalam HTML 4 atau HTML 5. Anda membuat asumsi bahwa memberikan id yang berfungsi dengan CSS sudah cukup untuk apa yang dia coba lakukan, dan mungkin memiliki xmlid akan berhasil, tapi saya tidak melihat bagaimana Anda mengeluarkannya dari pertanyaan seperti yang tertulis. Contoh yang ditunjukkannya tidak akan berfungsi dalam HTML 4 atau HTML 5 dan tidak ada cara untuk membuatnya bekerja untuk mencapai apa yang ditampilkan.
tvanfosson
6
Saya memutakhirkan jawaban ini karena menjawab pertanyaan: " dapatkah Anda menetapkan banyak ID untuk suatu elemen?" Namun saya harus menambahkan bahwa ini melampaui spesifikasi belaka; seperti yang ditunjukkan dalam jawaban yang diterima, ketika datang ke HTML / XHTML itu sendiri spec mengatakan Anda hanya dapat menetapkan ID menggunakan idatribut. Untuk memperjelas, xml:idatribut (dan pada kenyataannya, atribut apa pun di luar namespace default) tidak valid dalam XHTML. Namun ketika Anda mengutip dari spesifikasi HTML5, ini tidak akan menyebabkan xml:id="bar"kegagalan; masih akan menambahkan barID ke elemen ini, memungkinkannya cocok #bar.
BoltClock
28

Pemahaman saya selalu:

  • ID adalah penggunaan tunggal dan hanya diterapkan pada satu elemen ...

    • Masing-masing dikaitkan sebagai Pengidentifikasi Unik untuk (hanya) satu elemen tunggal .
  • Kelas dapat digunakan lebih dari sekali ...

    • Karena itu mereka dapat diterapkan ke lebih dari satu elemen , dan sama namun berbeda, mungkin ada lebih dari satu kelas (yaitu beberapa kelas) per elemen .
Ross
sumber
18
Saya tidak berpikir ini memenuhi syarat untuk menjadi jawaban atas pertanyaan itu. Pertanyaannya adalah: "Bisakah beberapa ID digunakan untuk satu elemen?"
Kevin
4
@ kevin Jawaban ini mengasumsikan OP menghadapi masalah XY dan pasti dapat membantu seseorang yang mencoba mencapai perilaku kelas melalui ID - untuk alasan apa pun.
Mahdi
Anda merujuk pada "penggunaan tunggal" tetapi itu dapat menyebabkan kebingungan. Anda dapat dan merupakan hal yang frecuent dan benar menggunakan beberapa kali satu elemen dengan id-nya. Apa yang saya pikir Anda bicarakan adalah interpretasi lain yaitu: Anda harus menggunakan satu (dan hanya satu) id untuk suatu elemen dan HANYA untuk elemen itu.
Mbotet
27

Tidak. Meskipun definisi dari w3c untuk HTML 4 tampaknya tidak secara eksplisit mencakup pertanyaan Anda, definisi atribut nama dan id mengatakan tidak ada spasi di pengidentifikasi:

Token ID dan NAME harus dimulai dengan huruf ([A-Za-z]) dan dapat diikuti oleh sejumlah huruf, digit ([0-9]), tanda hubung ("-"), garis bawah ("_") , titik dua (":"), dan titik (".").

pelakon
sumber
20

Tidak. Setiap elemen DOM, jika memiliki id, memiliki id tunggal dan unik. Anda dapat memperkirakannya menggunakan sesuatu seperti:

<div id='enclosing_id_123'><span id='enclosed_id_123'></span></div>

dan kemudian gunakan navigasi untuk mendapatkan apa yang Anda inginkan.

Jika Anda hanya ingin menerapkan gaya, nama kelas lebih baik.

tvanfosson
sumber
Itu akan memecah validasi.
Aupajo
3
Apa yang ilegal tentang jawaban ini? Bisakah seseorang menjelaskan suara turun?
tpower
19
Bukan saya. :-) Dan saya tidak yakin apa yang Anda maksud dengan melanggar validasi? Id dari span dan span berbeda (melampirkan vs terlampir) sehingga tidak ada masalah dengan id duplikat. Mungkin beberapa orang tidak membaca dengan cermat.
tvanfosson
4
Merampok bank adalah ilegal, masalah perangkat lunak tidak pernah ilegal. Ini realitas virtual tua versus masalah realitas aktual lagi :-P
TrojanName
@BrianFenton men-debug kode orang lain membuat saya sadar bahwa itu harus ilegal. Saya katakan 5 tahun penjara karena tidak mengikuti spesifikasi tanpa alasan yang baik untuk tidak melakukannya.
ProblemsOfSumit
18

Anda hanya dapat memiliki satu ID per elemen, tetapi Anda memang dapat memiliki lebih dari satu kelas. Tetapi tidak memiliki beberapa atribut kelas, masukkan beberapa nilai kelas ke dalam satu atribut.

<div id="foo" class="bar baz bax">

sangat legal.

AmbroseChapel
sumber
4

Tidak, Anda tidak dapat memiliki beberapa id untuk satu tag, tetapi saya telah melihat tag dengan nameatribut dan idatribut yang diperlakukan sama oleh beberapa aplikasi.

kekuatan
sumber
1
di IE, sebelum IE8, ya. tetapi mereka telah memperbaiki bug itu dalam mode standar sekarang. getElementById () digunakan untuk mengembalikan case yang cocok dengan elem secara tidak benar pada nama dan id.
scunliffe
4

Tidak, Anda harus menggunakan DIV bersarang jika Anda ingin menuju jalan itu. Selain itu, bahkan jika Anda bisa, bayangkan kebingungan yang akan terjadi ketika Anda menjalankan document.getElementByID (). ID apa yang akan diambil jika ada beberapa?

Pada topik yang sedikit terkait, Anda dapat menambahkan beberapa kelas ke DIV. Lihat diskusi Eric Myers di,

http://meyerweb.com/eric/articles/webrev/199802a.html

Anjisan
sumber
1
Bukankah itu akan mendapatkan id yang Anda tentukan di antara kurung? getElementById();tidak melakukan apa-apa tanpa string yang menentukan apa yang akan didapat ?! getElementById('foo');akan mendapatkan elemen dengan foo sebagai ID! Beberapa ID tidak masalah di sini. Itu masih akan mencari "foo".
Rin dan Len
3
Any ID assigned to a div element is unique.
However, you can assign multiple IDs "under", and not "to" a div element.
In that case, you have to represent those IDs as <span></span> IDs.

Say, you want two links in the same HTML page to point to the same div element in  the page.

The two different links
<p><a href="#exponentialEquationsCalculator">Exponential Equations</a></p>         

<p><a href="#logarithmicExpressionsCalculator"><Logarithmic Expressions</a></p>

Point to the same section of the page. 
<!-- Exponential / Logarithmic Equations Calculator -->
<div class="w3-container w3-card white w3-margin-bottom">      
   <span id="exponentialEquationsCalculator"></span>
   <span id="logarithmicEquationsCalculator"></span>
</div>
Samdom For Peace
sumber
2

http://www.w3.org/TR/REC-html40/struct/global.html#h-7.5.2

Atribut id memberikan pengidentifikasi unik ke elemen (yang dapat diverifikasi oleh pengurai SGML).

dan

Token ID dan NAME harus dimulai dengan huruf ([A-Za-z]) dan dapat diikuti oleh sejumlah huruf, digit ([0-9]), tanda hubung ("-"), garis bawah ("_") , titik dua (":"), dan titik (".").

Jadi "id" harus unik dan tidak boleh berisi spasi.

Alexandr
sumber
1

Saya ingin mengatakan secara teknis ya, karena benar-benar apa yang diberikan secara teknis selalu bergantung pada browser. Sebagian besar browser mencoba untuk menjaga spesifikasi sebaik mungkin dan sejauh yang saya tahu tidak ada spesifikasi dalam css yang menentangnya. Saya hanya akan menjamin kode html, css, javascript aktual yang dikirim ke browser sebelum langkah penerjemah lain masuk.

Namun saya juga mengatakan tidak karena setiap browser yang biasanya saya uji tidak benar-benar membiarkan Anda. Jika Anda perlu melihat sendiri simpan yang berikut ini sebagai file .html dan buka di browser utama. Di semua browser yang saya uji pada fungsi javascript tidak akan cocok dengan elemen. Namun, hapus "hunkojunk" dari tag id dan semua berfungsi dengan baik. Kode sampel

<html>
<head>
</head>
<body>
    <p id="hunkojunk1 hunkojunk2"></p>

<script type="text/javascript">
    document.getElementById('hunkojunk2').innerHTML = "JUNK JUNK JUNK JUNK JUNK JUNK";
</script>
</body>
</html>
James
sumber
1

Tidak.

Karena itu, tidak ada yang bisa menghentikan Anda melakukannya. Tetapi Anda akan mendapatkan perilaku yang tidak konsisten dengan berbagai browser. Jangan lakukan itu. 1 ID per elemen.

Jika Anda ingin beberapa tugas ke elemen gunakan kelas (dipisahkan oleh spasi).

Snowcrash
sumber
0

Itu menarik, tetapi sejauh yang saya tahu jawabannya adalah perusahaan tidak. Saya tidak mengerti mengapa Anda memerlukan ID bersarang, karena Anda biasanya akan melewatinya dengan elemen lain yang memiliki ID bersarang yang sama. Jika Anda tidak ada gunanya, jika Anda melakukannya masih ada gunanya.

Robert K.
sumber
1
Saya ingin menggunakan 2 id juga untuk kompatibilitas. misalnya sesuatu yang dulunya adalah artikel-8 dalam versi sebelumnya tetapi sekarang disebut node-8 yang memiliki 2 id dari satu elemen akan mencegah pengkodean solusi untuk membuatnya kompatibel kembali. Sementara kedua ID akan tetap sebagai pengidentifikasi unik.
FLY
0

Saya tahu ini berumur satu tahun tetapi saya ingin tahu tentang hal ini sendiri dan saya yakin orang lain akan menemukan jalan mereka di sini. Jawaban sederhananya adalah tidak, seperti yang dikatakan orang lain sebelum saya. Suatu elemen tidak dapat memiliki lebih dari satu ID dan ID tidak dapat digunakan lebih dari sekali dalam satu halaman. Cobalah dan Anda akan melihat seberapa baik itu tidak berhasil.

Sebagai tanggapan atas jawaban tvanfosson mengenai penggunaan ID yang sama dalam dua elemen yang berbeda. Sejauh yang saya ketahui, ID hanya dapat digunakan sekali dalam satu halaman terlepas dari apakah itu dilampirkan pada tag yang berbeda.

Menurut definisi, elemen yang membutuhkan ID harus unik tetapi jika Anda membutuhkan dua ID maka itu tidak benar-benar unik dan membutuhkan kelas.

Taylor
sumber
1
Tetapi, jika Anda membaca jawaban tvanfosson, kedua ID itu jelas berbeda "enclosing_id_123"! = "Enclosed_id_123"
Ben
0

kelas dibuat khusus untuk ini, di sini adalah kode yang dapat Anda pahami

<html>
<head>
    <style type="text/css">
     .personal{
            height:100px;
            width: 100px;   

        }
    .fam{
            border: 2px solid #ccc;
        }   
    .x{
            background-color:#ccc;
        }   

    </style>
</head>
<body>

    <div class="personal fam x"></div>

</body> 
</html>

sumber
-4

Saya tidak berpikir Anda dapat memiliki dua Id tetapi itu harus mungkin. Menggunakan id yang sama dua kali adalah kasus yang berbeda ... seperti dua orang menggunakan paspor yang sama. Namun satu orang dapat memiliki beberapa paspor ... Datang mencari ini karena saya memiliki situasi di mana seorang karyawan dapat memiliki beberapa fungsi. Katakan "sysadm" dan "koordinator tim" yang memiliki id = "sysadm teamcoordinator" akan membiarkan saya mereferensikannya dari halaman lain sehingga employee.html # sysadm dan employee.html # teamcoordinator akan mengarah ke tempat yang sama ... Suatu hari seseorang lain mungkin mengambil alih fungsi koordinator tim sementara sysadm tetap menjadi sysadm ... maka saya hanya perlu mengubah id pada halaman karyawan.html ... tapi seperti yang saya katakan - itu tidak bekerja :(

Ole Reidar Johansen
sumber