19. september 2002 - 20:53Der 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; }
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];
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 :-)
Synes godt om
Ny brugerNybegynder
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.