Toon posts:

[JS] sorteren <select> </select>

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi allemaal,

Ik heb een selectbox met de volgende specificatie
code:
1
2
3
4
5
<select name="select1" size="6" >
<option type="type1" begintijd="btijd1" eindtijd="etijd1" value="value1" >text1 </option>
<option type="type2" begintijd="btijd2" eindtijd="etijd2" value="value2" >text2 </option>
<option type="type3" begintijd="btijd3" eindtijd="etijd3" value="value3" >text3 </option>
</select>


Zoals je ziet heb ik meerdere atributen in de options. Ik wil deze select graag sorteren, maar de enige manier die ik ken is via een aparte array. (vullen, sorteren, schrijven) Het probleem is echter dat ikd at hier niet kan gebruiken, want dan krijg ik de ectra attributen nooit meer in mijn options.

Weet iemand een manier om te sorteren, zonder dat ik mijn extra attributen kwijt raak?? Moet IE5.5 compatible zijn, verder maakt het niks uit.

Ben met de search wel wat tegen gekomen, maar daar kwam ik niet echt ver mee, dus een beetje help zou mooi zijn. Alvast bedankt.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Waarom zou je je attributen kwijtraken als je gaat sorteren :?

Verwijderd

Topicstarter
ALs ik sorteer op mijn manier, doe ik dat door de waarden in een array te zetten en dan weer nieuwe options aan te maken in de select, maar bij het maken van een option met:

new Option() kan je toch alleen een text en een value aangeven????

Of zie ik iets over het hoofd?

  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

waarom zet je dan niet alles in een array :? dan sorteren en dan pas in de select zetten?

anders moet je de select uitlezen, array pushen, sorteren en select vullen :) (maar das wel erg omslachtig)

disjfa - disj·fa (meneer)
disjfa.nl


Verwijderd

mySelect = document.forms.namedItem('formnaam').elements.namedItem('select1');

De rest kun je doen met mySelect.options en de DOM methode insertBefore. Schrijf of leen even een sorteer algoritme, en je bent klaar.

Verwijderd

Topicstarter
Ik denk dat ik inderdaad verder moet met die van Cheatah, maar het wil me echt niet lukken. Ik ben niet zo heel vertrouwd met JS, dus misschien kan je me iets meer vertellen. Ik gebruik de volgende move-functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function movem(fromElement, toElement)
{
    if (toElement)
    
    for (var i = fromElement.options.length - 1; i >=0; i--)
    {
        if (fromElement.options.item(i).selected)
        {
            var element = fromElement.removeChild(fromElement.options.item(i));
            element.begintijd=document.getElementById(idselected.value).begintijd;
            element.eindtijd=document.getElementById(idselected.value).eindtijd;
            element.selected = false;
            
            if (!element.parentElement)
            {
                toElement.appendChild(element);
            }
        }
    }
}


Heb ik ergens geleend ;) Ik snap hem wel, maar ik zou hem zelf niet kunnen bedenken. Ik wil dus graag dat hij toElement sorteert nadat hij het element verplaatst heeft. Of als het kan dat hij hem gewoon meteen op de goede plek zet. Ik begrijp dat ik waarde van de options zal moeten vergelijken, maar hoe?? Ik weet dat het op een request begint te lijken, maar ik kom er echt niet uit. Als je geen code wil geven kan je dan misschien in woorden uitleggen wat ik moet doen en eventueel wat functies noemen, want dat is meestal het probleem. ik ken de functies niet.

Alvast heel veel dank!

Verwijderd

Topicstarter
Ik begrijp dat ik hier genoegen mee moet nemen? Ik kom er echt nog niet uit, wellicht kan iemand me nog iets meer vertellen?

  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 15-08 12:40
Je maakt via de DOM even een nieuw element aan (document.createElement('SELECT')), gooit dat met je bestaande <select> box door die functie hierboven heen, je plakt je nieuwe box in je document 'document.appendChild(toElement)', en je dondert je oude <select> weg. (document.removeChild(fromElement)).

Tevens lijkt een cursus programmeren me erg handig! :)

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


Verwijderd

ajvdvegt schreef op 27 January 2003 @ 18:18:
Je maakt via de DOM even een nieuw element aan (document.createElement('SELECT')), gooit dat met je bestaande <select> box door die functie hierboven heen, je plakt je nieuwe box in je document 'document.appendChild(toElement)', en je dondert je oude <select> weg. (document.removeChild(fromElement)).

Tevens lijkt een cursus programmeren me erg handig! :)

Wat is het voordeel aan jouw manier? Met een insertBefore of appendChild kom je veel verder, dan behoud je alle properties en methodes die het option element al had. Met andere woorden: jouw 'programmeer oplossing' is ook rot aan alle kanten.

Het probleem van de TS is alleen nog een sorteer algoritme, en hij past een stuk code toe dat ik ergens anders voor heb geschreven. De HTMLOptionsCollection zou je kunnen zien als een array, dus een gewoon sorteer algoritme voor een array implementeren, en het werkt. Ik ga niet iedere keer een compleet stuk code schrijven hoor :)

[ Voor 4% gewijzigd door Verwijderd op 27-01-2003 19:45 ]

Pagina: 1