1 |
/* |
2 |
Very slow filtering function for unordered lists |
3 |
Dobrica Pavlinusic, dpavlin@rot13.org 2004-09-06 |
4 |
*/ |
5 |
|
6 |
function filter(document, id, regex) { |
7 |
|
8 |
var min_len = 1; |
9 |
var debug = 0; |
10 |
|
11 |
// get UL element by ID |
12 |
var ul = document.getElementById(id); |
13 |
if (! ul) { return; } |
14 |
|
15 |
// get all LI elements |
16 |
var li = ul.getElementsByTagName("li"); |
17 |
|
18 |
// get out if too few characters in search |
19 |
if (regex && regex.length < min_len) { |
20 |
return; |
21 |
} |
22 |
|
23 |
var status = ""; |
24 |
|
25 |
if (debug) { status += "filter: "+regex+"<br>"; } |
26 |
|
27 |
var total = 0; |
28 |
var visible = 0; |
29 |
|
30 |
if (debug) { status += "elements = "+li.length+"<br>"; } |
31 |
|
32 |
if (regex) { var reg = new RegExp(regex, 'i'); } |
33 |
|
34 |
for (var i = 0; i < li.length; i++) { |
35 |
|
36 |
var text = li[i].innerHTML.replace(/<[^>]+>/g,""); |
37 |
if (debug) { status += i+": "+text; } |
38 |
|
39 |
total++; |
40 |
|
41 |
if (reg && reg.test(text)) { |
42 |
li[i].style.display = ''; |
43 |
visible++; |
44 |
if (debug) { status += " visible " }; |
45 |
} else { |
46 |
li[i].style.display = 'none'; |
47 |
if (debug) { status += " hidden " }; |
48 |
} |
49 |
if (debug) { status += "<br>"; } |
50 |
|
51 |
} |
52 |
|
53 |
status += "shown "+visible+" of "+total+" entries for <em>"+regex+"</em><br>"; |
54 |
|
55 |
var status_div = document.getElementById("status"); |
56 |
if (status_div) { |
57 |
status_div.innerHTML = status; |
58 |
} |
59 |
} |