Мені потрібне було чисте та легке рішення (отже, жоден jQuery і подібні), який буде виглядати точно так само, як звичайний HTML, також буде продовжувати працювати, коли попередньо встановлений лише звичайний HTML (тому javascript лише покращить його), і який дозволить здійснювати пошук, починаючи з літер ( включаючи національні літери UTF-8), якщо це можливо, якщо це не додає зайвої ваги. Він також повинен працювати швидко на дуже повільних браузерах (думаю, rPi - тому бажано не виконувати JavaScript після завантаження сторінки).
У firefox він використовує ідентифікацію CSS і, таким чином, дозволяє здійснювати пошук за буквами, а в інших браузерах він використовуватиме попередній
(але там він не підтримує швидкий пошук за буквами). У будь-якому випадку, я цілком задоволений результатами.
Ви можете спробувати це в дії тут
Це виглядає так:
CSS:
.i0 { }
.i1 { margin-left: 1em; }
.i2 { margin-left: 2em; }
.i3 { margin-left: 3em; }
.i4 { margin-left: 4em; }
.i5 { margin-left: 5em; }
HTML (клас "i1", "i2" тощо позначають рівень ідентифікації):
<form action="/filter/" method="get">
<select name="gdje" id="gdje">
<option value=1 class="i0">Svugdje</option>
<option value=177 class="i1">Bosna i Hercegovina</option>
<option value=190 class="i2">Babin Do</option>
<option value=258 class="i2">Banja Luka</option>
<option value=181 class="i2">Tuzla</option>
<option value=307 class="i1">Crna Gora</option>
<option value=308 class="i2">Podgorica</option>
<option value=2 SELECTED class="i1">Hrvatska</option>
<option value=5 class="i2">Bjelovarsko-bilogorska županija</option>
<option value=147 class="i3">Bjelovar</option>
<option value=79 class="i3">Daruvar</option>
<option value=94 class="i3">Garešnica</option>
<option value=329 class="i3">Grubišno Polje</option>
<option value=368 class="i3">Čazma</option>
<option value=6 class="i2">Brodsko-posavska županija</option>
<option value=342 class="i3">Gornji Bogićevci</option>
<option value=158 class="i3">Klakar</option>
<option value=140 class="i3">Nova Gradiška</option>
</select>
</form>
<script>
</script>
JavaScript:
function loadFilter() {
'use strict';
function add_nbsp() {
var opt = document.getElementsByTagName("option");
for (var i = 0; i < opt.length; i++) {
if (opt[i].className[0] === 'i') {
opt[i].innerHTML = Array(3*opt[i].className[1]+1).join(" ") + opt[i].innerHTML;
}
}
}
navigator.sayswho= (function() {
var ua= navigator.userAgent, tem,
M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*([\d\.]+)/i) || [];
if(/trident/i.test(M[1])){
tem= /\brv[ :]+(\d+(\.\d+)?)/g.exec(ua) || [];
return 'IE '+(tem[1] || '');
}
M= M[2]? [M[1], M[2]]:[navigator.appName, navigator.appVersion, '-?'];
if((tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
return M.join(' ');
})();
function isFirefox() {
var ua= navigator.userAgent,
M= ua.match(/firefox\//i);
return M;
}
if (!isFirefox()) {
add_nbsp();
}
}