1 |
dpavlin |
411 |
/* |
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 |
|
|
} |