Avatar billede lightbrain Nybegynder
19. september 2002 - 20:53 Der er 7 kommentarer og
1 løsning

Objekt-hieraki

Hej

Er det ikke en, som kan lave denne funktion om til en "smart" funktion?

Jeg tænker specielt på, at defineringen af objekt-hierakiet (hjemmeside -> sektion -> emne -> artikel) gentages i hver if-sætning. Kan man ikke lave det noget smartere?

(Du skal bare abstrahere fra alternative-variablen.)

function getRelativeElement (element, no) {

    if (element.name.indexOf("2") >= 0 )
        var alternative = 2;
    else
        var alternative = "";
       
    if (element.name.indexOf("Hjemmeside") >= 0 ) {
        if (no == 0) return element.form.elements["Hjemmeside" + alternative];
        if (no == 1) return element.form.elements["Sektion" + alternative];
        if (no == 2) return element.form.elements["Emne" + alternative];
        if (no == 3) return element.form.elements["Artikel" + alternative];
        else return false;
    }

    else if (element.name.indexOf("Sektion") >= 0 ) {
        if (no == -1) return element.form.elements["Hjemmeside" + alternative];
        if (no == 0) return element.form.elements["Sektion" + alternative];
        if (no == 1) return element.form.elements["Emne" + alternative];
        if (no == 2) return element.form.elements["Artikel" + alternative];
        else return false;
    }
   
    else if (element.name.indexOf("Emne") >= 0 ) {
        if (no == -2) return element.form.elements["Hjemmeside" + alternative];
        if (no == -1) return element.form.elements["Sektion" + alternative];
        if (no == 0) return element.form.elements["Emne" + alternative];
        if (no == 1) return element.form.elements["Artikel" + alternative];
        else return false;
    }

    else if (element.name.indexOf("Artikel") >= 0 ) {
        if (no == -3) return element.form.elements["Hjemmeside" + alternative];
        if (no == -2) return element.form.elements["Sektion" + alternative];
        if (no == -1) return element.form.elements["Emne" + alternative];
        if (no == 0) return element.form.elements["Artikel" + alternative];
        else return false;
    }
   
    alert("fejl");
}
Avatar billede jakoba Nybegynder
19. september 2002 - 23:27 #1
var opslag = new Array( "Hjemmeside", "Sektion", "Emne", "Artikel" );

function getRelativeElement (element, no) {

    if (element.name.indexOf("2") >= 0 )
        var alternative = 2;
    else
        var alternative = "";
     
    if (element.name.indexOf("Hjemmeside") >= 0 )
        return ( opslag[no] )  ? element.form.elements[ opslag[no] + alternative ]  : false;

    if (element.name.indexOf("Sektion") >= 0 )
        return ( opslag[no+1] ) ? element.form.elements[ opslag[no+1] + alternative ] : false;

    if (element.name.indexOf("Emne") >= 0 ) {
        return ( opslag[no+2] ) ? element.form.elements[ opslag[no+2] + alternative ] : false;

    if (element.name.indexOf("Artikel") >= 0 ) {
        return ( opslag[no+3] ) ? element.form.elements[ opslag[no+3] + alternative ] : false;
 
    alert("fejl");
}

det er da lidt kortere :)
den kan klemmes en smule mere men så bliver den ret ulæselig.

mvh JakobA
Avatar billede lightbrain Nybegynder
21. september 2002 - 21:14 #2
Tak, for det.

Din optimerede kode - som jeg selv har bygget videre på - virker efter hensigten, men kan man ikke optimere den endnu mere?


var opslag = new Array( "Hjemmeside", "Sektion", "Emne", "Artikel" );

function getRelativeElement (element, no) {

    var alternative = "";
   
    if (element.name.indexOf("2") >= 0 )
        alternative = 2;
     
    if (element.name.indexOf(getAbsoluteElement(element, 0).name) >= 0 )
        return ( opslag[no] ) ? element.form.elements[ opslag[no] + alternative ] : false;

    if (element.name.indexOf(getAbsoluteElement(element, 1).name) >= 0 )
        return ( opslag[no+1] ) ? element.form.elements[ opslag[no+1] + alternative ] : false;

    if (element.name.indexOf(getAbsoluteElement(element, 2).name) >= 0 )
        return ( opslag[no+2] ) ? element.form.elements[ opslag[no+2] + alternative ] : false;

    if (element.name.indexOf(getAbsoluteElement(element, 3).name) >= 0 )
        return ( opslag[no+3] ) ? element.form.elements[ opslag[no+3] + alternative ] : false;
 
    alert("fejl");
}

function getAbsoluteElement(element, no) {

    var alternative = "";
   
    if (element.name.indexOf("2") >= 0 ) alternative = 2;
       
    if (no == 0) return element.form.elements["Hjemmeside" + alternative];
    if (no == 1) return element.form.elements["Sektion" + alternative];
    if (no == 2) return element.form.elements["Emne" + alternative];
    if (no == 3) return element.form.elements["Artikel" + alternative];
   
    alert("fejl3");
}
Avatar billede lightbrain Nybegynder
21. september 2002 - 21:20 #3
Nej, vent lige lidt.
Avatar billede lightbrain Nybegynder
21. september 2002 - 21:20 #4
Jeg vender lige tilbage.
Avatar billede lightbrain Nybegynder
22. september 2002 - 10:56 #5
Jeg kan ikke forstå, hvorfor A ikke kan optimeres ned til B. (Den retunerer "Hjemmeside", når den skulle retunere "Sektion".


A:
    if (element.name.indexOf(getAbsoluteElement(element, 0).name) >= 0 )
        return ( opslag[no+0] ) ? element.form.elements[ opslag[no+0] + alternative ] :
    false;

    if (element.name.indexOf(getAbsoluteElement(element, 1).name) >= 0 )
        return ( opslag[no+1] ) ? element.form.elements[ opslag[no+1] + alternative ] :
    false;

    if (element.name.indexOf(getAbsoluteElement(element, 2).name) >= 0 )
        return ( opslag[no+2] ) ? element.form.elements[ opslag[no+2] + alternative ] :
    false;

    if (element.name.indexOf(getAbsoluteElement(element, 3).name) >= 0 )
        return ( opslag[no+3] ) ? element.form.elements[ opslag[no+3] + alternative ] :
    false;



B:   
    for (i = 0; getAbsoluteElement(element, i); i++) {     
          if (element.name.indexOf(getAbsoluteElement(element, i).name) >= 0 ) {
            return ( opslag[no + i] ) ? element.form.elements[ opslag[no + i] + alternative ] : false;
        }
    }
Avatar billede jakoba Nybegynder
22. september 2002 - 11:31 #6
du har forkert stopbetingelse i forløkken:
    for (i = 0; i<4; i++) {
Avatar billede lightbrain Nybegynder
22. september 2002 - 11:39 #7
Det giver det samme resultat - den retunerer stadig "Hjemmeside", når den skulle retunere "Sektion".
Avatar billede jakoba Nybegynder
22. september 2002 - 11:49 #8
Jeg tror det ville være nemmere hvis du viste den side hvor det skal bruges.

Det ser lidt ud somom du prøver at gøre noget meget enkelt på en besværlig måde :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester