Ik ben bezig met een scriptje, waar ik de user de mogelijkheid wil bieden om realtime de data te doorzoeken. De data wordt via php uit een mySQL database gelezen en in de juiste arrays/objecten geplaats, maar om het even duidelijk te houden, wou ik in dit voorbeeldje even gebruik maken van wat (statische) variabelen.
de vorm waarin de data opgeslagen wordt
Nu moet er gezocht kunnen worden op:
- het getal uit de eerste kolom..
- het getal uit de tweede kolom..
- het getal uit de derde kolom..
- het object .naam
- het object .leeftijd
- het object .woonplaats
- het object .id
Het is de bedoeling dat later de mogelijkheid om op meerdere gecombineerde punten kan worden gezocht, maar voor nu maar even 1 tegelijk.
Een volgende stap lijkt me het opzetten van een simpel zoekformuliertje:
Vervolgens een lijkt me het een beste om een recursieve functie, of iets wat daar op lijkt te gebruiken, ivm het doorlopen van de data bestaand uit arrays met verschillende lengtes.
Ik ben zelf al erg lang aan het klooien geweest, maar kom er gewoon niet uit en heb het idee dat ik mezelf een beetje aan het vastwerken ben
Even een opzetje van mijn kant, voor zover ik kom (misschien is het wel helemaal verkeerd, maar wil toch iets laten zien)
Typfouten voorbehouden
Het scriptje zou verder niet echt nuttige informatie weergeven WAAR hij de data heeft gevonden, maar het is in ieder geval een begin..
Ik hoor graag ideeën, commentaar, verbeteringen of al het andere wat mij op (de goede
) weg kan helpen..
Het is volgens mij nog al een lap tekst geworden, dus als je zo behulpzaam bent geweest om alles te lezen! Dankjewel voor de moeite iig :P! Toffe gozer/meid die je bent!
de vorm waarin de data opgeslagen wordt
code:
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
| function fnObject(argNaam, argLeeftijd, argPlaats, argId) {
this.naam = argNaam;
this.leeftijd = argLeeftijd;
this.woonplaats = argPlaats;
this.id = argId;
}
data = new Array();
data[0] = new Array();
data[0][1] = new Array();
data[0][1][1] = new fnObject('Jaap',34,'Amsterdam',1);
data[0][1][2] = new fnObject('Jan',32,'Amsterdam',2);
data[0][1][3] = new fnObject('Jeroen',38,'Amersfoort',3);
data[0][1][4] = new fnObject('Jerommeke',24,'Gouda',4);
data[0][1][5] = new fnObject('Henk',41,'Utrecht',5);
data[0][2] = new Array();
data[0][2][1] = new fnObject('Flip',52,'Zwolle',6);
data[0][2][2] = new fnObject('Frits',23,'Zwolle',7);
data[0][2][3] = new fnObject('Johan',27,'Enkhuizen',8);
data[0][2][4] = new fnObject('Dirk',23,'Dedemsvaart',9);
data[0][3] = new Array();
data[0][3][1] = new fnObject('Pieter',20,'Leeuwaren',10);
data[0][3][2] = new fnObject('Tomas',30,'Den Bosch',11);
data[0][3][3] = new fnObject('Simon',27,'Maastricht',12);
data[1] = new Array();
data[1][1] = new Array();
data[1][1][1] = new fnObject('Klaas',20,'Leeuwarden',13);
data[1][1][2] = new fnObject('Bert',30,'Saaizeg',14);
data[1][1][3] = new fnObject('Willem',24,'Verweg',15);
data[1][1][4] = new fnObject('Karel',25,'Zevenhuizen',16);
data[1][2] = new Array();
data[1][2][1] = new fnObject('Simon',32,'Groningen',17);
data[1][2][2] = new fnObject('Bert',30,'Lutjelollum',18);
data[2] = new Array();
data[2][1] = new Array();
data[2][1][1] = new fnObject('Kees',45,'Moddergat',19);
data[2][1][2] = new fnObject('Sjakie',34,'Beilen',20);
data[2][2] = new Array();
data[2][2][1] = new fnObject('Leo',46,'Weesp',21);
data[2][2][2] = new fnObject('Jacob',32,'Wezep',22); |
Nu moet er gezocht kunnen worden op:
- het getal uit de eerste kolom..
- het getal uit de tweede kolom..
- het getal uit de derde kolom..
- het object .naam
- het object .leeftijd
- het object .woonplaats
- het object .id
Het is de bedoeling dat later de mogelijkheid om op meerdere gecombineerde punten kan worden gezocht, maar voor nu maar even 1 tegelijk.
Een volgende stap lijkt me het opzetten van een simpel zoekformuliertje:
code:
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
| <form name="frmZoeken">
<fieldset><legend>Zoeken</legend>
kolom 1:
<input type="radio" name="radZoekenOp" value="Kolom1" />
<input type="text" name="txtKolom1" /><br />
kolom 2:
<input type="radio" name="radZoekenOp" value="Kolom2" />
<input type="text" name="txtKolom2" /><br />
kolom 3:
<input type="radio" name="radZoekenOp" value="Kolom3" />
<input type="text" name="txtKolom3" /><br />
naam:
<input type="radio" name="radZoekenOp" value="Naam" />
<input type="text" name="txtNaam" /><br />
leeftijd:
<input type="radio" name="radZoekenOp" value="Leeftijd" />
<input type="text" name="txtLeeftijd" /><br />
woonplaats:
<input type="radio" name="radZoekenOp" value="Woonplaats" />
<input type="text" name="txtWoonplaats" /><br /><br />
id:
<input type="radio" name="radZoekenOp" value="Id" />
<input type="text" name="txtId" /><br /><br />
<input type="button" name="btnZoek" value="Nu zoeken.."
onClick="fnSearch(data, document.forms['frmZoeken'].elements['radZoekenOp'].value);" />
</fieldset>
</form> |
code:
1
2
3
4
5
6
7
8
9
10
| fnSearch(parameter 1, parameter 2)
parameter 1 = de datasource waarin hij gaat zoeken.. vb:
- data
of data[1]
of data[2][1]
parameter 2 = hetgeen waar hij op zoekt.. vb:
- kolom1
of woonplaats
of naam |
Vervolgens een lijkt me het een beste om een recursieve functie, of iets wat daar op lijkt te gebruiken, ivm het doorlopen van de data bestaand uit arrays met verschillende lengtes.
Ik ben zelf al erg lang aan het klooien geweest, maar kom er gewoon niet uit en heb het idee dat ik mezelf een beetje aan het vastwerken ben
Even een opzetje van mijn kant, voor zover ik kom (misschien is het wel helemaal verkeerd, maar wil toch iets laten zien)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| function fnSearch(argDataSource, argSearchFor) {
// ga door iedere 'child'/index van de datasource
for (strVar in argDataSource) {
// als het type variabele een Array is, heeft het nog geen objecten. Dus als
// we niet op kolom1, kolom2 of kolom3 zoeken, hebben we hier nog nix
// aan.. dus moeten we nog 1 level dieper
if ((argDataSource[strVar].constructor.toString().match('Array') == 'Array') &&
(!argSearchFor.indexOf('kolom'))) fnSearch(argDataSource[strVar], argSearchFor);
// als we op kolom* zoeken, en de waarde van het textfield is
//gelijk aan die van de huidige index >>
// als we niet op kolom* zoeken, maar op een andere factor
// vergelijk het bijbehorende object met de waarde van het
// bijbehorende textfield >>
else if (argSearchFor.indexOf('kolom')) {
if (strVar == document.forms['frmZoek'].elements['txt'+ argSearchFor].value)
alert(gevonden: '+ strVar);
} else if (eval('argDataSource[strVar].' + argSearchFor) == document.forms['frmZoek'].elements['txt'+ argSearchFor].value)
alert('gevonden: '+ strVar);
}
} |
Typfouten voorbehouden
Het scriptje zou verder niet echt nuttige informatie weergeven WAAR hij de data heeft gevonden, maar het is in ieder geval een begin..
Ik hoor graag ideeën, commentaar, verbeteringen of al het andere wat mij op (de goede
Het is volgens mij nog al een lap tekst geworden, dus als je zo behulpzaam bent geweest om alles te lezen! Dankjewel voor de moeite iig :P! Toffe gozer/meid die je bent!