Toon posts:

[javascript] target path met square brackets, hoe doe ik dat

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb ongeveer de volgende situatie:

JavaScript:
1
2
3
4
5
6
7
8
9
10
varA = "frameA";
varB = "frameB";
targetPath = varA + "." + varB;


//Deze versie werkt:
editor[varA][varB].location.reload;

//Deze versie werkt niet:
editor[targetPath].location.reload;


Hoe kan ik ervoor zorgen dat ik van 2 variablen of meer een "path" maak, zeg maar?

[ Voor 9% gewijzigd door Verwijderd op 07-03-2004 03:18 ]


Verwijderd

Topicstarter
Verwijderd schreef op 07 maart 2004 @ 03:18:
Ik heb ongeveer de volgende situatie:

JavaScript:
1
2
3
4
5
6
7
8
9
10
varA = "frameA";
varB = "frameB";
targetPath = varA + "." + varB;


//Deze versie werkt:
editor[varA][varB].location.reload;

//Deze versie werkt niet:
editor[targetPath].location.reload;


Hoe kan ik ervoor zorgen dat ik van 2 variablen of meer een "path" maak, zeg maar?
Dus uiteindelijk wil ik die 2 variablen (varA + varB) samenvoegen in een nieuwe variable (targetPath).

Oftewel:
editor[targetPath].location.reload == editor.frameA.frameB.location.reload

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Gooi varA, varB, enz in een array en loop daar doorheen.
voorbeeld (niet getest):
code:
1
2
3
4
5
6
7
8
9
10
11
var the_array = new Array();
the_array[0] = "frameA";
the_array[1] = "frameB";

var targetObject = editor;
for (var i = 0; i < the_array.length; i++)
{
  targetObject = targetObject[the_array[i]];
}

targetObject.location.reload();


p.s. of ga voor een snelle ranzige oplossing: gebruik eval()
code:
1
eval("editor." + targetPath + ".location.reload()");

Today's subliminal thought is:


Verwijderd

Topicstarter
Laat ik maar het hele verhaal vertellen:

Ik ben bezig met het bouwen van een soort CMS-systeem voor IE6. Nou heb ik een pagina met daarin knoppen waar commando's aan hangen zoals bold, italic enz. In die pagina is een Iframe, waarin ik een pagina ga laden die aangepast kan worden, die dus contentEditable is. Het Iframe heeft de name "editor".

Normaal gesproken zou het commando voor bold iets zijn als:
editor.document.execCommand('bold');

Maar, ik wil ook framesets kunnen laden in het Iframe "editor."

Stel, ik heb een simpele frameset, en binnen die frameset is een frame met de naam "mainFrame". mainFrame bevat een pagina die ik kan aanpassen; die contentEditable is.

Zou ik nu het bold commando willen uitvoeren op mainFrame, dan wordt dat:
editor.mainFrame.document.execCommand('bold');

Maar in mainFrame zou nog een 2e frameSet kunnen zitten:
editor.mainFrame.tweedeFrame.document.execCommand('bold');

Ok... ik weet de namen van de frames; ik weet dus dat ik een frame genaamd "mainFrame" en een frame genaamd "tweedeFrame" heb. Deze 2 namen heb ik opgeslagen in variablen: dus frameA = "mainFrame" en frameB = "tweedeFrame".

Het command voor het maken van vette tekst wordt nu:
editor[frameA][frameB].document.execCommand('bold');

Maar, het kan dus voorkomen dat er geen frameset is in het Iframe editor. Het kan ook voorkomen dat het frameset 3 niveaus diep is. Daarm dacht ik het probleem op te lossen door 1 variable te maken (targetPath):

bijvoorbeeld:
JavaScript:
1
2
3
4
5
6
7
8
9
10
if (editor bevat geen frames) {
  targetPath = "";
} else if (editor bevat 1 frame) {
   targetPath = frameA;
} else if (editor bevat 2 frames) {
   targetPath = frameA + "." + frameB;
} else if (editor bevat 3 frames) {
   targetPath = frameA + "." + frameB + "." + frameC;
}
editor[targetPath].document.execCommand('bold');


Maar, deze syntax werkt dus niet...
Wat zou het wel moeten zijn?

[ Voor 33% gewijzigd door Verwijderd op 07-03-2004 16:30 ]


Verwijderd

hey, kijk is of dit werkt:

if (editor bevat geen frames) {
targetPath = "";
} else if (editor bevat 1 frame) {
targetPath = frameA;
} else if (editor bevat 2 frames) {
targetPath = frameA + "][" + frameB;
} else if (editor bevat 3 frames) {
targetPath = frameA + "][" + frameB + "][" + frameC;
}
eval("editor[" + targetPath + "].document.execCommand('bold')");

succes!

Verwijderd

Topicstarter
Hmmz, was nog niet bekend met eval... Maar iig krijg ik de volgende foutmelding:
"Expected Identifier"
Pagina: 1