Cara mendapatkan elemen skrip saat ini:
1. Gunakan document.currentScript
document.currentScript
akan mengembalikan <script>
elemen yang skripnya sedang diproses.
<script>
var me = document.currentScript;
</script>
Manfaat
- Sederhana dan eksplisit. Andal.
- Tidak perlu memodifikasi tag skrip
- Bekerja dengan skrip asinkron (
defer
& async
)
- Bekerja dengan skrip yang disisipkan secara dinamis
Masalah
- Tidak akan berfungsi di browser dan IE yang lebih lama.
- Tidak bekerja dengan modul
<script type="module">
2. Pilih skrip berdasarkan id
Memberi script atribut id akan memungkinkan Anda dengan mudah memilihnya dengan id dari dalam menggunakan document.getElementById()
.
<script id="myscript">
var me = document.getElementById('myscript');
</script>
Manfaat
- Sederhana dan eksplisit. Andal.
- Hampir didukung secara universal
- Bekerja dengan skrip asinkron (
defer
& async
)
- Bekerja dengan skrip yang disisipkan secara dinamis
Masalah
- Perlu menambahkan atribut khusus ke tag skrip
id
atribut dapat menyebabkan perilaku aneh untuk skrip di beberapa browser untuk beberapa kasus tepi
3. Pilih skrip menggunakan data-*
atribut
Dengan memberikan data-*
atribut pada skrip, Anda dapat dengan mudah memilihnya dari dalam.
<script data-name="myscript">
var me = document.querySelector('script[data-name="myscript"]');
</script>
Ini memiliki sedikit manfaat dibandingkan opsi sebelumnya.
Manfaat
- Sederhana dan eksplisit.
- Bekerja dengan skrip asinkron (
defer
& async
)
- Bekerja dengan skrip yang disisipkan secara dinamis
Masalah
- Perlu menambahkan atribut khusus ke tag skrip
- HTML5, dan
querySelector()
tidak memenuhi semua browser
- Kurang banyak didukung daripada menggunakan
id
atribut
- Akan bergaul
<script>
dengan id
kasus tepi.
- Mungkin bingung jika elemen lain memiliki atribut dan nilai data yang sama pada halaman.
4. Pilih skrip berdasarkan src
Alih-alih menggunakan atribut data, Anda dapat menggunakan pemilih untuk memilih skrip menurut sumber:
<script src="//example.com/embed.js"></script>
Di embed.js:
var me = document.querySelector('script[src="//example.com/embed.js"]');
Manfaat
- Andal
- Bekerja dengan skrip asinkron (
defer
& async
)
- Bekerja dengan skrip yang disisipkan secara dinamis
- Tidak diperlukan atribut atau id khusus
Masalah
- Apakah tidak bekerja untuk script lokal
- Akan menyebabkan masalah di lingkungan yang berbeda, seperti Pengembangan dan Produksi
- Statis dan rapuh. Mengubah lokasi file skrip akan membutuhkan modifikasi skrip
- Kurang banyak didukung daripada menggunakan
id
atribut
- Akan menyebabkan masalah jika Anda memuat skrip yang sama dua kali
5. Ulangi semua skrip untuk menemukan yang Anda inginkan
Kami juga dapat mengulangi setiap elemen skrip dan memeriksa masing-masing satu per satu untuk memilih yang kami inginkan:
<script>
var me = null;
var scripts = document.getElementsByTagName("script")
for (var i = 0; i < scripts.length; ++i) {
if( isMe(scripts[i])){
me = scripts[i];
}
}
</script>
Ini memungkinkan kami menggunakan kedua teknik sebelumnya di browser lama yang tidak mendukung querySelector()
dengan baik dengan atribut. Sebagai contoh:
function isMe(scriptElem){
return scriptElem.getAttribute('src') === "//example.com/embed.js";
}
Ini mewarisi manfaat dan masalah dari pendekatan apa pun yang diambil, tetapi tidak mengandalkan querySelector()
sehingga akan bekerja di browser lama.
6. Dapatkan skrip yang dieksekusi terakhir
Karena skrip dieksekusi secara berurutan, elemen skrip terakhir akan sangat sering menjadi skrip yang sedang berjalan:
<script>
var scripts = document.getElementsByTagName( 'script' );
var me = scripts[ scripts.length - 1 ];
</script>
Manfaat
- Sederhana.
- Hampir didukung secara universal
- Tidak diperlukan atribut atau id khusus
Masalah
- Apakah tidak bekerja dengan script asynchronous (
defer
& async
)
- Apakah tidak bekerja dengan script dimasukkan secara dinamis