Ik gebruik onderstaande code om door een select list te lopen en daarin bepaalde option elementen naar een hidden list te schuiven. dit moet zo snel mogelijk gebeuren. Echter bij duizenden elementen duurt dit een paar seconden. Ik heb door benchmarken uitgevonden dat de onderstaande code de boel vertraagt, maar ik kan het zelf niet sneller krijgen dan dit.
De select lists worden al verborgen, alle opties worden naar een document fragment gestuurd die dan ergens anders aangeplakt wordt. Kan ik op een snellere manier door een lange lijst lopen en een conditie checken? zoiets van "voor elke a=b binnen de lijst" ipv onderstaande. Zijn er andere manieren?
De select lists worden al verborgen, alle opties worden naar een document fragment gestuurd die dan ergens anders aangeplakt wordt. Kan ik op een snellere manier door een lange lijst lopen en een conditie checken? zoiets van "voor elke a=b binnen de lijst" ipv onderstaande. Zijn er andere manieren?
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| // JavaScript Document // srcOpt = selection list options // f = document fragment // deze code in onderdeel van code die wordt aangeroepen wanneer een gebruiker // een groot select menu filtered door middel van keyboard input (ala google search as you type) switch(moveType.toLowerCase()){ case "selected": { for(var i = 0;i < srcLength;i++) { if(srcOpt[i].selected == true ){ srcOpt[i].selected = false; f.appendChild(src.removeChild(srcOpt[i])); srcLength = srcOpt.length; i--; } } break; } case "isvalue", "istext": { for(var i = 0;i < srcLength;i++) { if(srcOpt[i][Mid(moveType,2,999)].toUpperCase().indexOf(theInput) != -1){ srcOpt[i].selected = false; f.appendChild(src.removeChild(srcOpt[i])); srcLength = srcOpt.length; i--; } } break; } case "isnotvalue", "isnottext": { for(var i = 0;i < srcLength;i++) { if(srcOpt[i][Mid(moveType,5,999)].toUpperCase().indexOf(theInput) == -1){ srcOpt[i].selected = false; f.appendChild(src.removeChild(srcOpt[i])); srcLength = srcOpt.length; i--; } } break; } case "moveonly": { for(var i = 0;i < srcLength;i++) { srcOpt[i].selected = false; f.appendChild(src.removeChild(srcOpt[i])); srcLength = srcOpt.length; i--; } break; } default: document.write ("Unknown move command (internal error).<br>"); break; } |
Human Bobby