Langsung ke konten utama

Membuat Custom Element Di HTML Menggunakan Javascript



Pada kesempatan kali ini saya akan membahas tentang bagaimana cara Membuat Custom Element HTML Menggunakan javascript. Biasanya banyak developer yang masih kurang puas akan fitur-fitur dari element yang ada di HTML, sehingga kebanyakan dari mereka lebih senang untuk membuat custom elementnya sendiri. Pada postingan kali ini saya akan mencoba membuat conditional element dimanan nantinya element akan menampilkan child element pada kondisi tertentu.

Sebelum memulai buatlah file baru dan beri nama index.html kemudian copy template berikut.
<html>
<head>
<meta name="author" content="Muhammad Sayuti">
<title>Custom Elements</title>
</head>
<body>
<input type="checkbox" id="checkbox">
<dev-if if="checkbox is checked">
Checkbox is checked
</dev-if>
<script src="index.js"></script>
</body>
</html>

Sekarang buat file javascript baru dan beri nama index.js. Untuk membuat custom element kita akan menggunakan fungsi customElements untuk memberitahu browser tentang adanya tag baru yang kita buat. pada file ini buatlah class baru kemudian extends class tersebut dengan class DOM level 2 yaitu HTMLElement.
class DevIf extends HTMLElement{
constructor(){
// If you define a ctor, always call super() first!
// This is specific to CE and required by the spec.
super();
}
}

Jika Anda membuat suatu class dengan melakukan extends pada class yang ada pada DOM seperti HTMLElement, HTMLSelectElement dan sebagainya, sangat disarankan untuk memanggil super() pada bagian constructor() terlebih dahulu. Pada DOM level 2 kita dapat menggunakan beberapa callback sesuai keperluan yang akan kita gunakan pada custom element yang kita buat. Berikut adalah beberapa callback yang dapat Anda gunakan.

  • createdCallback() (Mozilla) : Biasanya callback ini akan dipanggil/dieksekusi saat element Anda teregister/terdaftar di DOM.
  • attachedCallback (Mozilla) atau connectedCallback() (Chrome) :
    Biasanya callback ini akan dipanggil /dieksekusi saat element Anda dimasukkan ke dalam DOM.
  • detachedCallback() (Mozilla) atau disconnectedCallback() (Chrome):
    Biasanya callback ini akan dipanggil /dieksekusi saat element Anda dihapus dari DOM.
  • attributeChangedCallback() (Mozilla & Chrome) :
    Biasanya callback ini akan dipanggil /dieksekusi saat ada perubahan pada attribute dari element yang Anda buat.
Di kasus ini saya menggunakan Chrome browser jadi kita akan fokus ke callback yang ada di Chrome browser.
Sekarang tambahkan 2 callback yaitu connectedCallback() dan attributeChangedCallback().
class DevIf extends HTMLElement{
constructor(){
// If you define a constructor, always call super() first!
// This is specific to CE and required by the specification.
super();
}
connectedCallback(){
//get value from if attribute and define new if variable on the current class
this.if = this.getAttribute('if');
}
attributeChangedCallback(name, oldValue, newValue){
if (name !== 'if') {
return;
}

this.if = newValue;
}
}

Pada script diatas saya memberikan value pada variable if dengan mengambil attribute if pada element dan mengubah value if jika terdapat perubahan pada attribute if di fungsi attributeChangedCallback(). Sekarang kita akan membuat getter and setter untuk variabel if, tambahkan script berikut kedalam class.
get if(){
return this.if;
}
set if(_condition){
if(!_condition){
return;
}

}
Selanjutnya kita akan membuat fungsi baru untuk melakukan parsing dan mengecek kondisi yang diberikan pada attribut if, buatlah fungsi baru checkCondition()
checkCondition(condition){
let parsed = condition.split(' ');
switch(parsed[1]){
case 'is':
//get element by id provided in first parameter
let el = document.querySelector(`#${parsed[0]}`);
//if element not found, warn the user and stop execution.
if(el == null){
console.warn('cannot find element with id',parsed[0]);
return;
}
// get the element type
let type = this.getElementType(el);
// check default state in our element for current condition
this.checkDefault(el);
// add listener to listen change on our element
this.addListener(el,type);
break;
}
}
Karena disini hanya demo jadi saya hanya akan memberikan 1 kondisi, jika Anda ingin mengembangkannya dan menambahkan kondisi lain Anda dapat mendapatkan source codenya melalui github. Pada script diatas saya melakukan split pada value yang diberikan di attribut if. variabel parsed akan menjadi array dan pada index 0 akan kita gunakan sebagai acuan untuk mencari element berdasarkan id, kemudian pada index 1 merupakan kondisinya, disini hanya ada kondisi "is", kemudian pada index 2 adalah kondisi apa yang akan digunakan. Pada contoh ini saya menggunakan element checkbox sebagai parameter pertama, is untuk parameter kedua dan checked pada parameter ketiga. Disini saya tidak melakukan pengecekan pada parameter ketiga karena jika kita menggunakan checkbox maka yang dicek sudah pasti apakah checkbox tersebut di check atau tidak.
Sekarang buat fungsi baru untuk mendapatkan tipe element yang diberikan pada parameter pertama jika element ditemukan.
getElementType(target){
if(target.nodeName === 'input'){
return target.getAttribute('type');
}else{
return target.nodeName.toLowerCase();
}
}
Setelah itu buat fungsi baru untuk menentukan apa yang terjadi pada element berdasarkan kondisi saat ini.
checkDefault(target,type){
if(type === 'checkbox'){
if(target.checked || target.hasAttribute('checked')){
this.style.display = 'initial';
}else{
this.style.display = 'none';
}
}
}
Sekarang buat fungsi baru lagi untuk menambahkan listener saat ada perubahan yang terjadi pada element dan memanggil fungsi checkDefault().
addListener(target,type){
let self = this;
target.addEventListener('change',function(){
let t = self.getElementType(this);
self.checkDefault(this,t);
});
}
Untuk langkah terakhir kita hanya perlu mendefinisikan element yang akan kita buat dengan menggunakan fungsi customElements() yang ada di window. parameter pertama merupakan nama tag yang kita berikan sedangkan yang kedua adalah class yang baru saja kita buat. Letakkan script berikut di baris paling akhir dalam file javascript Anda.
cusomElements.define('dev-if',DevIf);

Sekarang cek hasilnya pada Chrome browser Anda, element yang ada di dalam custom element yang kita buat hanya akan tampil saat checkbox di check. berikut hasil akhirnya.
See the Pen conditional-element by Muhammad Sayuti (@ekoputrapratama) on CodePen.


Mungkin itu saja yang dapat saya jelaskan pada postingan kali ini tentang bagaimana cara Membuat Custom Element HTML Menggunakan Javascript.
Semoga bermanfaat...!!

Komentar

Postingan populer dari blog ini

Menampilkan Gambar Pada PictureBox Di Visual Basic .Net

Pada kesempatan kali ini saya akan menunjukkan bagaimana cara menampilkan gambar pada PictureBox di Visual Basic .NET. Terdapat beberapa cara untuk menampilkan gambar pada PictureBox dan disini saya akan memberikan beberapa cara yang saya ketahui serta kelebihan dan kekurangan dalam menggunakan cara tersebut. Pertama-tama buatlah sebuah project baru dengan memilih File > New > New Project . Kemudian Drag And Drop PictureBox dari jendela Toolbox ke form. Menampilkan Gambar Dengan Cara Standar Yang saya maksud dengan cara standar disini adalah cara yang biasa dilakukan oleh programmer atau developer dan yang dianjurkan oleh MSDN pada artikel How to: Set Pictures at Run Time dan  How to: Load a Picture Using the Designer Kelebihan Mudah diimplementasikan terutama bagi programmer/developer pemula. Kekurangan Ada kemungkinan gambar yang diload/ditampilkan ke PictureBox akan dilock/dikunci untuk digunakan oleh user yang mengakses gambar tersebut, sehingga user lain tidak dapat men...

Membuat Situs Traffic Exchange

Membuat Situs Traffic Exchange Pada saat ini situs-situs traffic exchange semakin marak di dunia internet. Karena semakin berkembangya teknologi sehingga membuat hal lain pun ikut berkembang. Situs Traffic Exchange ini misalnya, saat ini banyak situs-situs traffic exchange yang tidak hanya menyediakan layana traffic exchange namun sekarang  telah ada situs traffic exchange yang menawarkan Social Exchange seperti twitter followers, facebook like, google+ circle dan lain sebagainya. Dan bahkan ada juga situs traffic exchange yang menyediakan layanan SEO seperti Directory Submission.  Pada postingan ini saya tidak akan berbicara banyak kepada Anda, karena saya tahu saat Anda masuk ke halaman ini berarti Anda sedang mencari cara Membuat Situs Traffic Exchange. Mungkin Anda sampai ke halaman ini karna mungkin hanya sedikit blog/website lain yang membahas tentang hal ini. Dan mungkin niat Anda adalah Membuat Situs Traffic Exchange secara gratis sehingga Anda tidak perlu mengeluarkan...

Dua Startup Indonesia yang Berangkat ke Google Amerika

Dua perusahaan rintisan (startup) asal Indonesia berkesempatan diboyong ke markas Google yang bertempat di Mountain View, California, Amerika Serikat. Selain Indonesia, ada satu lagi startup dari negara lain yang dibawa untuk menghadiri konferensi tahunan Google I/O yang digelar pada 16-18 Mei 2017 mendatang. Yaitu dari Meksiko. STARTUP MENJAMUR DI INDONESIA, HANYA SEDIKIT YANG SUKSES Startup yang dimaksud adalah Pasienia (Indonesia) , Reblood (Indonesia) , dan Croquetero (Meksiko). Ketiganya yang terpilih dari 469 pelamar dari anggota Google Business Groups (GBG) dan para enterprenir independen di 26 negara. Disebutkan, pengajuan tersebut merepresentasikan ide-ide besar dari enterpreneur di seluruh dunia, termasuk di antaranya Brasil, Mesir, Maroko, Nigeria, Pakistan, Peru, hingga Uganda. "Sebagai bentuk usaha Google dalam menginspirasi para entrepreneur untuk dapat mengarahkan bisnis mereka ke ranah online, Google mengundang para anggota GBG global untuk dapat berpartisipasi dal...