Kode berikut dapat dijalankan tanpa masalah di Chrome, tetapi melempar kesalahan berikut di Internet Explorer 11.
Objek tidak mendukung properti atau metode 'dimulai dengan'
Saya menyimpan ID elemen dalam sebuah variabel. Apa masalahnya?
function changeClass(elId) {
var array = document.getElementsByTagName('td');
for (var a = 0; a < array.length; a++) {
var str = array[a].id;
if (str.startsWith('REP')) {
if (str == elId) {
array[a].style.backgroundColor = "Blue";
array[a].style.color = "white";
} else {
array[a].style.backgroundColor = "";
array[a].style.color = "";
}
} else if (str.startsWith('D')) {
if (str == elId) {
array[a].style.backgroundColor = "Blue";
array[a].style.color = "white";
} else {
array[a].style.backgroundColor = "";
array[a].style.color = "";
}
}
}
}
<table>
<tr>
<td id="REP1" onclick="changeClass('REP1');">REPS</td>
<td id="td1"> </td>
</tr>
<tr>
<td id="td1"> </td>
<td id="D1" onclick="changeClass('D1');">Doors</td>
</tr>
<tr>
<td id="td1"> </td>
<td id="D12" onclick="changeClass('D12');">Doors</td>
</tr>
</table>
javascript
html
Bhushan Dhamdhere
sumber
sumber
str.indexOf("REP") == 0
IE.Jawaban:
String.prototype.startsWith
adalah metode standar dalam versi terbaru JavaScript, ES6.Melihat tabel kompatibilitas di bawah ini, kita dapat melihat bahwa itu didukung pada semua platform utama saat ini, kecuali versi Internet Explorer.
Anda harus menerapkan
.startsWith
sendiri. Ini adalah polyfill :sumber
String.prototype.startsWith = function(search, pos) { return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; };
text.indexOf("newString")
adalah metode terbaik, bukanstartsWith
.Contoh:
sumber
indexOf
tidak mengembalikan nilai, tetapi @Jona telah memeriksa bahwa nilai kembali adalah nol (yaitu string di awal), yang berarti itu adalah pengganti yang baik untukstartsWith
!Jika ini terjadi di aplikasi Angular 2+, Anda bisa saja menghapus komentar string polyfills di polyfills.ts :
sumber
import 'core-js/es6/string';
memperbaikinya. Terimakasih banyak!Ganti fungsi beginWith dengan:
Ini akan mendukung semua browser termasuk IE
Posisi dapat diatur ke 0 untuk pencocokan string dari posisi awal yang berarti posisi ke-0.
sumber
Seperti yang orang lain katakan beginWith dan endsWith adalah bagian dari ES6 dan tidak tersedia di IE11. Perusahaan kami selalu menggunakan perpustakaan lodash sebagai solusi polyfill untuk IE11. https://lodash.com/docs/4.17.4
sumber
Meskipun pos Oka berfungsi dengan baik, posisinya mungkin agak ketinggalan jaman. Saya menemukan pondok itu dapat mengatasinya dengan satu fungsi tunggal. Jika Anda telah menginstal lodash, ini mungkin menghemat beberapa baris.
Coba saja:
. . .
sumber
Saya juga baru-baru ini menghadapi masalah. Saya diselesaikan menggunakan ^ yang mirip dengan startwith di
jquery
. Mengatakan,kita bisa menggunakan
Di sini, str adalah id elemen.
sumber
Ikuti metode ini jika ada masalah saat bekerja dengan proyek angular2 +
Saya sedang mencari solusi ketika saya mendapatkan kesalahan ini, dan itu membuat saya di sini. Tetapi pertanyaan ini tampaknya spesifik tetapi kesalahannya tidak, itu adalah kesalahan umum. Ini adalah kesalahan umum untuk pengembang sudut yang berurusan dengan Internet Explorer.
Di versi terbaru Angular, ada kode komentar di polyfills.ts menunjukkan semua polyfill yang diperlukan untuk kelancaran dalam versi Internet Explorer IE09, IE10 dan IE11
Batalkan komentar kode dan itu akan bekerja dengan sempurna di browser IE
Tapi Anda mungkin melihat penurunan kinerja di browser IE dibandingkan dengan yang lain :(
sumber