Ich brauchte eine saubere und leichte Lösung (also kein jQuery und ähnliches), die genau wie normales HTML aussieht, auch dann weiter funktioniert, wenn nur einfaches HTML voreingestellt ist (Javascript verbessert es also nur) und die Suche durch Startbuchstaben ermöglicht ( einschließlich nationaler UTF-8-Buchstaben), wenn dies möglich ist, wenn kein zusätzliches Gewicht hinzugefügt wird. Es muss auch in sehr langsamen Browsern schnell funktionieren (denken Sie an rPi - also vorzugsweise kein Javascript, das nach dem Laden der Seite ausgeführt wird).
In Firefox wird die CSS-Identifikation verwendet und somit die Suche nach Buchstaben ermöglicht. In anderen Browsern wird das
Voranstellen verwendet (dort wird jedoch die schnelle Suche nach Buchstaben nicht unterstützt). Wie auch immer, ich bin ziemlich zufrieden mit den Ergebnissen.
Sie können es hier in Aktion ausprobieren
Es geht so:
CSS:
.i0 { }
.i1 { margin-left: 1em; }
.i2 { margin-left: 2em; }
.i3 { margin-left: 3em; }
.i4 { margin-left: 4em; }
.i5 { margin-left: 5em; }
HTML (Klasse "i1", "i2" usw. bezeichnen die Identifikationsebene):
<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();
}
}