Di browser IE 7 8, jika Anda menggunakan atribut trim () untuk menghapus spasi, kesalahan akan dilaporkan.
Oleh karena itu, ada solusi berikut untuk masalah ini:
var aa = $ ("#id"). val (). trim () --- metode trim () tidak dapat diuraikan di IE
Larutan:
[var aa = $ .trim ($ ("#id"). Val ()); ] Ini tidak mudah digunakan, jadi gunakan yang diperkenalkan di bawah ini. Yang pertama telah diuji.
Kelompok orang W3C ditendang di kepala oleh keledai, dan mereka tidak mendukung fungsi trim (dan trimleft, trimright) sampai Java Script 1.8.1. Sayangnya, hanya Firefox3.5 yang mendukungnya sekarang. Karena menghilangkan kekosongan di kedua sisi string terlalu umum, semua perpustakaan besar memiliki bayangan sendiri. Selain itu, orang asing memiliki banyak energi penelitian dan telah membuat banyak pencapaian.
Menerapkan 1 OK. (Tulis ini di JS, lalu ikuti string yang ingin Anda hapus secara langsung.trim ())
Salinan kode adalah sebagai berikut:
String.prototype.trim = function () {
kembalikan .replace ini (/^/s/s*/, '') .replace (// s/s*$/, '');
}
Itu tidak terlihat sangat bagus, dan saya menggunakan dua penggantian biasa. Kecepatan sebenarnya luar biasa, terutama karena optimalisasi internal browser. Contoh terkenal dari splicing string, penambahan langsung lebih cepat daripada stringbuffer yang terbuat dari array. Perpustakaan kelas Base2 menerapkan implementasi ini.
Menerapkan 2
Salinan kode adalah sebagai berikut:
String.prototype.trim = function () {
kembalikan .replace ini (/^/s/, '') .replace (// s $/, '');
}
Ini sangat mirip dengan implementasi 1, tetapi sedikit lebih lambat, alasan utamanya adalah bahwa ia pertama -tama mengasumsikan bahwa setidaknya ada satu whitespace. Prototipe.js menggunakan implementasi ini, tetapi namanya strip, karena metode prototipe mencoba untuk mengganti nama dengan Ruby.
Implementasi 3
Salinan kode adalah sebagai berikut:
String.prototype.trim = function () {
kembalikan .substring (Math.max (ini.
}
Bagian kosong diperoleh dengan mencegat (tentu saja, karakter whitespace diizinkan di tengah), dan total 4 metode asli disebut. Presetnya sangat pintar, substring membutuhkan dua angka sebagai parameter. Math.max menggunakan dua angka sebagai parameter, dan pencarian kembali ke satu angka. Kecepatannya sedikit lebih lambat dari dua teratas, tetapi jauh lebih cepat dari bagian bawah.
Menerapkan 4
Salinan kode adalah sebagai berikut:
String.prototype.trim = function () {
returnThis .replace (/^/s |/s $/g, '');
}
Ini dapat disebut versi implementasi 2 yang disederhanakan, yaitu menggunakan operator kandidat untuk menghubungkan dua keteraturan. Tetapi melakukan hal itu akan gagal mencapai peluang optimasi browser, yang tidak sebagus realisasi 3. Karena tampaknya elegan, banyak aplikasi perpustakaan seperti jQuery dan mootools
Menerapkan 5
Salinan kode adalah sebagai berikut:
String.prototype.trim = function () {
var str = ini;
str = str.match (// s (?:/s/s)*/);
mengembalikan str? str [0]: '';
}
Pertandingan adalah untuk kembali ke array, dan bagian yang memenuhi persyaratan string asli menjadi elemennya. Untuk mencegah ruang kosong di tengah string agar tidak terputus, kita perlu menggunakan pengelompokan non-capture (?: exp). Karena array mungkin kosong, kita perlu membuat penilaian lebih lanjut nanti. Tampaknya browser kurang kuat dalam pemrosesan pengelompokan, dan satu kata lebih lambat. Jadi jangan percaya takhayul tentang aturannya, meskipun pada dasarnya mahakuasa.
Implementasi 6
Salinan kode adalah sebagai berikut:
String.prototype.trim = function () {
kembalikan .replace ini (/^/s*(/s*(/s/s)*)/s*$/, '$ 1');
}
Berikan bagian yang diperlukan dan masukkan ke dalam string kosong. Tetapi efisiensinya sangat buruk, terutama di IE6.
Implementasi 7
Salinan kode adalah sebagai berikut:
String.prototype.trim = function () {
kembalikan .replace ini (/^/s*(/s*(?:/s/s)*)/s*$/, '$ 1');
}
Ini sangat mirip dengan implementasi 6, tetapi menggunakan paket non-penangkapan untuk memberikan keuntungan, dan efisiensi kinerja sedikit ditingkatkan.
Implementasi 8
Salinan kode adalah sebagai berikut:
String.prototype.trim = function () {
kembalikan .replace ini (/^/s*((?: [/s/s]*/s)?)/s*$/, '$ 1');
}
Saya meningkatkan dua ide di atas, menggunakan set pengelompokan dan karakter yang tidak menangkap, dan diganti dengan ?, Mana yang luar biasa. Terutama di IE6, kegilaan dapat digunakan untuk menggambarkan peningkatan kinerja ini, dan secara langsung membunuh Firefox dalam hitungan detik.
Menerapkan 9
Salinan kode adalah sebagai berikut:
String.prototype.trim = function () {
kembalikan .replace ini (/^/s*([/s/s]*?)/s*$/, '$ 1');
}
Kali ini, saya menggunakan pencocokan malas untuk menggantikan pengelompokan yang tidak menangkap, yang ditingkatkan di Firefox, dan IE tidak sejenisnya terakhir kali.
Sadari 10
Salinan kode adalah sebagai berikut:
String.prototype.trim = function () {
var str = ini,
Whitespace = '/n/r/t/f/x0b/xa0/u2000/u2001/u2002/u2003/u2004/u2020 05/u2006/u2007/u2008/u2009/u200a/u200b/u2028/u2029/u2009';
untuk (var i = 0, len = str.length; i = 0; i--) {
if (whitespace.indexof (str.charat (i)) === -1) {
str = str.substring (0, i 1);
merusak;
}
}
return whitespace.indexof (str.charat (0)) === -1? str: '';
}
Saya hanya ingin mengatakan bahwa orang yang menciptakan ini tidak lagi digambarkan sebagai sapi, tetapi pada tingkat yang sama dengan dewa. Pertama -tama mencantumkan semua karakter kosong yang mungkin, memotong bagian depan kosong di traversal pertama, dan memotong bagian belakang kosong untuk kedua kalinya. Seluruh proses hanya menggunakan indeksof dan substring, metode asli yang dirancang khusus untuk pemrosesan string, dan tidak menerapkan keteraturan. Kecepatannya luar biasa cepat, dan diharapkan dekat dengan implementasi biner internal, dan memiliki kinerja yang luar biasa di IE dan Firefox (tentu saja browser lain tidak diragukan lagi). Kecepatan semuanya nol milidetik di samping itu.
Menerapkan 11
Salinan kode adalah sebagai berikut:
String.prototype.trim = function () {
var str = ini,
str = str.replace (/^/s/, '');
untuk (var i = str.length-1; i> = 0; i--) {
if (//s/.test(str.charat(i))) {
str = str.substring (0, i 1);
merusak;
}
}
mengembalikan str;
}
Implementasi 10 telah memberi tahu kami bahwa metode intersepsi string normal yang awalnya tidak diketahui jauh lebih baik daripada penggantian reguler, meskipun sedikit lebih rumit. Tetapi selama keteraturan tidak terlalu rumit, kami dapat menggunakan browser untuk mengoptimalkan keteraturan untuk meningkatkan efisiensi eksekusi program, dan mencapai 8 kinerja di IE. Saya tidak berpikir ada orang yang biasanya menerapkan implementasi 10 dalam suatu proyek, karena implementasi whitespace terlalu panjang dan sulit diingat (tentu saja, jika Anda membangun perpustakaan kelas, itu pasti akan dimulai). Menerapkan 11 dapat dikatakan sebagai versinya yang lebih baik. Kosong di depan dipotong oleh penggantian reguler. Mereka diperlakukan dengan metode asli nanti. Efeknya tidak lebih rendah dari versi aslinya, tetapi kecepatannya luar biasa.
Menerapkan 12
Salinan kode adalah sebagai berikut:
String.prototype.trim = function () {
var str = ini,
str = str.replace (/^/s/s*/, ''),
ws = // s/,
i = str.length;
while (ws.test (str.charat (-i)));
return str.slice (0, i 1);
}
Versi peningkatan yang lebih baik dari implementasi 10 dan implementasi 11 ditulis. Perhatikan bahwa ini bukan tentang kecepatan kinerja, tetapi tentang kemudahan memori dan aplikasi. Dan dua pendahulunya adalah nol milidetik di samping itu, mereka akan menggunakan ini untuk bekerja dan menakuti orang di masa depan.
Berikut ini adalah hasil perbandingan yang diberikan oleh orang asing. Latar belakang eksekusi adalah untuk melakukan operasi trim pada artikel ini (lebih dari 27.600 karakter).
Menerapkan Firefox 2 yaitu 6
trim1 15ms trim2 31ms trim3 46ms 31ms
trim4 47ms 46ms
trim5 156ms 1656ms
trim6 172ms 2406ms
trim7 172ms 1640ms
trim8 281ms trim9 125ms 78ms
Trim10 TRIM11 TRIM12 Implementasi fungsi trim mengungkapkan ide Anda sendiri. Jika Anda ingin memahami apa yang dikatakan penulis asli, silakan baca teks asli.
Saat ini ada 12 metode untuk menghapus ruang di JS:
Menerapkan 1
String.prototype.trim = function () {return this.replace (/^/s/s*/, '') .replace (// s/s*$/, ''); }
Menerapkan 2
String.prototype.trim = function () {return this.replace (/^/s+/, '') .replace (// s+$/, ''); }
Implementasi 3
String.prototype.trim = function () {return this.s string (math.max (this.search (// s/), 0), this.search (// s/s*$/) + 1); }
Menerapkan 4
String.prototype.trim = function () {return this.replace (/^/s+|/s+$/g, ''); }
String.prototype.trim = function () {var str = this; str = str.match (// s+(?:/s+/s+)*/); mengembalikan str? str [0]: ''; }
String.prototype.trim = function () {return this.replace (/^/s*(/s*(/s+/s+)*)/s*$/, '$ 1'); }
Implementasi 7
String.prototype.trim = function () {return this.replace (/^/s*(/s*(?:/s+/s+)*)/s*$/, '$ 1'); }
String.prototype.trim = function () {return this.replace (/^/s*((?: [/s/s]*/s)?)/S*$/, '$ 1'); }
String.prototype.trim = function () {return this.replace (/^/s*([/s/s]*?)/S*$/, '$ 1'); }
String.prototype.trim = function () {var str = this, whitespace = ' /n/r/t/f/x0b/xa0/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?//?//?/?/?/?/?//?/? untuk (var i = 0, len = str.length; i <len; i ++) {if (whitespace.indexof (str.charat (i)) === -1) {str = str.s string (i); merusak; }} untuk (i = str.length -1; i> = 0; i--) {if (whitespace.indexof (str.charat (i)) === -1) {str. Str.S string (0, i + 1); merusak; }} return whitespace.indexof (str.charat (0)) === -1? str: ''; }
Menerapkan 11
String.prototype.trim = function () {var str = this, str = str.replace (/^/s+/, ''); untuk (var i = str.length-1; i> = 0; i--) {if (//s/.test(str.charat(i))) {str = str. String (0, i + 1); merusak; }} return str; }
Menerapkan 12
String.prototype.trim = function () {var str = this, str = str.replace (/^/s/s*/, ''), ws = // s/, i = str.length; while (ws.test (str.charat (-i))); return str.slice (0, i + 1); }
Itu tidak terlihat sangat bagus, dan saya menggunakan dua penggantian reguler, dan kecepatan sebenarnya luar biasa, terutama karena optimalisasi internal browser. Contoh splicing string yang terkenal, yang lebih cepat dari stringb? R terbuat dari array. Perpustakaan kelas Base2 menggunakan implementasi ini.
Ini sangat mirip dengan implementasi 1, tetapi sedikit lebih lambat, terutama karena pertama kali mengasumsikan bahwa setidaknya ada satu whitespace. Prototipe.js menggunakan implementasi ini, tetapi namanya strip, karena metode prototipe berusaha untuk memiliki nama yang sama dengan r y.
Bagian kosong diperoleh dengan mencegat (tentu saja, karakter whitespace diizinkan di tengah), dan total empat metode asli disebut. Ini dirancang dengan sangat cerdik, dan string S mengambil dua angka sebagai parameter. Math.max mengambil dua angka sebagai parameter, dan pencarian mengembalikan angka. Kecepatannya sedikit lebih lambat dari dua di atas, tetapi lebih cepat dari kebanyakan di bawah.
Ini dapat disebut versi implementasi 2 yang disederhanakan, yaitu menggunakan operator kandidat untuk menghubungkan dua aturan. Tetapi melakukan hal itu akan kehilangan kesempatan untuk mengoptimalkan browser, yang tidak sebagus realisasi 3. Karena tampaknya elegan, banyak perpustakaan kelas menggunakannya, seperti JQ Ry dan Mootools
Menerapkan 5
Match mengembalikan array, sehingga bagian dari string asli yang memenuhi persyaratan menjadi elemennya. Untuk mencegah spasi putih di tengah string dari dikecualikan, kita perlu menggunakan pengelompokan yang tidak menangkap (?: exp). Karena array mungkin kosong, kita perlu membuat penilaian lebih lanjut nanti. Tampaknya browser lemah dalam pengelompokan pemrosesan, dan satu kata lambat. Jadi jangan percaya takhayul tentang aturannya, meskipun pada dasarnya mahakuasa.
Implementasi 6
Berikan bagian yang diperlukan dan masukkan ke dalam string kosong. Tetapi efisiensinya sangat buruk, terutama di IE6.
Ini sangat mirip dengan implementasi 6, tetapi menggunakan paket non-penangkapan untuk memberikan keuntungan, dan efisiensi kinerja sedikit ditingkatkan.
Implementasi 8
Saya meningkatkan dua ide di atas, menggunakan set pengelompokan dan karakter yang tidak menangkap, dan diganti * dengan ?, Mana yang sangat menakjubkan. Terutama di IE6, kegilaan dapat digunakan untuk menggambarkan peningkatan kinerja ini, dan secara langsung membunuh Firefox dalam hitungan detik.
Menerapkan 9
Kali ini, saya menggunakan pencocokan malas untuk menggantikan pengelompokan yang tidak menangkap, yang ditingkatkan di Firefox, dan IE tidak sejenisnya terakhir kali.
Sadari 10
Saya hanya ingin mengatakan bahwa orang yang menciptakan ini tidak lagi digambarkan sebagai sapi, tetapi pada tingkat yang sama dengan dewa. Pertama -tama mencantumkan semua kemungkinan kosong, memotong kosong depan di traversal pertama, dan memotong bagian belakang kosong untuk kedua kalinya. Seluruh proses hanya menggunakan IndexOF dan S String, metode asli yang dirancang khusus untuk pemrosesan string, dan tidak menggunakan keteraturan. Kecepatannya luar biasa cepat, mungkin dekat dengan implementasi biner internal, dan memiliki kinerja yang baik di IE dan Firefox (tentu saja, browser lain tidak diragukan lagi). Kecepatannya semuanya dalam nol milidetik.
Implementasi 10 telah memberi tahu kami bahwa metode intersepsi string asli normal jauh lebih baik daripada penggantian reguler, meskipun sedikit lebih rumit. Tetapi selama keteraturan tidak terlalu rumit, kami dapat menggunakan browser untuk mengoptimalkan keteraturan untuk meningkatkan efisiensi eksekusi program, seperti mencapai 8 kinerja di IE. Saya tidak berpikir ada orang yang biasanya menerapkan implementasi 10 dalam suatu proyek, karena implementasi whitespace terlalu panjang dan sulit diingat (tentu saja jika Anda membangun perpustakaan kelas, itu pasti yang pertama). Menerapkan 11 dapat dikatakan sebagai versinya yang lebih baik. Kosong pada bagian pertama dipotong oleh penggantian reguler, dan pemrosesan selanjutnya dilakukan dengan metode asli. Efeknya tidak lebih rendah dari versi aslinya, tetapi kecepatannya sangat menakjubkan.
Versi peningkatan yang lebih baik dari metode penulisan implementasi 10 dan implementasi 11 bukan tentang kecepatan kinerja, tetapi tentang memori dan penggunaan yang mudah. Dan dua pendahulunya berada pada tingkat nol milidetik, jadi saya akan menggunakan ini untuk bekerja dan menakut -nakuti di masa depan.