Jika Anda telah bekerja dengan JavaScript, Anda tahu bahwa Internet Explorer tidak mengimplementasikan fungsi ECMAScript untuk Array.prototype.indexOf () [termasuk Internet Explorer 8]. Ini bukan masalah besar, karena Anda dapat memperluas fungsionalitas pada halaman Anda dengan kode berikut.
Array.prototype.indexOf = function(obj, start) {
for (var i = (start || 0), j = this.length; i < j; i++) {
if (this[i] === obj) { return i; }
}
return -1;
}
Kapan saya harus menerapkan ini?
Haruskah saya membungkusnya di semua halaman saya dengan cek berikut, yang memeriksa apakah fungsi prototipe ada dan jika tidak, silakan dan memperpanjang prototipe Array?
if (!Array.prototype.indexOf) {
// Implement function here
}
Atau apakah browser memeriksa dan apakah itu Internet Explorer maka cukup laksanakan?
//Pseudo-code
if (browser == IE Style Browser) {
// Implement function here
}
javascript
internet-explorer
internet-explorer-8
cross-browser
Bobby Borszich
sumber
sumber
Array.prototype.indexOf
bukan bagian dari ECMA-262 / ECMAScript. Lihat ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf Mungkin Anda berpikirString.prototype.indexOf
...Array.indexOf
tidak memperhitungkan indeks awal yang negatif. Lihat penerapan stop-gap saran Mozilla di sini: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…Jawaban:
Lakukan seperti ini...
Sebagai kompatibilitas yang disarankan oleh MDC .
Secara umum, kode deteksi peramban adalah yang besar tidak boleh tidak.
sumber
Atau, Anda bisa menggunakan fungsi jQuery 1.2 inArray , yang seharusnya berfungsi di seluruh browser:
sumber
Kode lengkapnya adalah sebagai berikut:
Untuk jawaban dan kode yang sangat menyeluruh untuk hal ini serta fungsi-fungsi array lainnya, lihat pertanyaan Stack Overflow Memperbaiki fungsi-fungsi JavaScript Array di Internet Explorer (indexOf, forEach, dll . ) .
sumber
Pustaka underscore.js memiliki fungsi indexOf yang bisa Anda gunakan sebagai gantinya:
sumber
Anda harus memeriksa apakah itu tidak didefinisikan menggunakan
if (!Array.prototype.indexOf)
.Juga, implementasi Anda
indexOf
tidak benar. Anda harus menggunakan===
alih-alih==
dalamif (this[i] == obj)
pernyataan Anda , jika tidak[4,"5"].indexOf(5)
akan sesuai dengan implementasi Anda, yang salah.Saya sarankan Anda menggunakan implementasinya di MDC .
sumber
Ada solusi resmi Mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
sumber
Saya akan merekomendasikan ini kepada siapa pun yang mencari fungsionalitas yang hilang:
http://code.google.com/p/ddr-ecma5/
Ini membawa sebagian besar fungsi ecma5 yang hilang ke browser lama :)
sumber
Ini implementasi saya. Pada dasarnya, tambahkan ini sebelum skrip lain pada halaman. yaitu di master Anda untuk solusi global untuk Internet Explorer 8. Saya juga menambahkan fungsi trim yang tampaknya digunakan dalam banyak kerangka kerja.
sumber
ini bekerja untuk saya.
sumber
Dengan Underscore.js
var arr=['a','a1','b'] _.filter(arr, function(a){ return a.indexOf('a') > -1; })
sumber