Toon posts:

[JS] Oneliner dat snel alle variabelen oppakt.

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit al een tijdje te knutselen maar ik heb het gevoel dat mijn oplossing niet echt het beste is |:(


De case:
In een dynamisch gegenereerde pagina kunnen globale variabelen var1 t/m var100 aanwezig zijn.


Op een willekeurige pagina staan er bijvoorbeeld drie: var1=64 , var55="test" en var64=0


De oneliner moet dan de volgende variable fabrieken: newvar="var1=64;var55=test;var64=0"

Wat ik nu heb (even op 3 regels voor de duidelijkheid):
code:
1
2
3
for (i=1;i<101;i++){
  if(window['var'+i]){newvar+="var"+i+"="+escape(window['var'+i].value)+";"}
}


Het moet snel zijn, klein en werken met alle browsers (ook oude). Wie weet het beter? :*)

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Ik zou de 'in' operator gebruiken (werkt alleen niet met IE5.0 en lager) om in ieder geval te zorgen dat waarden die anders naar false evalueren ook meegenomen worden. Dan krijg je zoiets:
JavaScript:
1
2
3
4
5
6
7
8
9
var var1=64, var55="test", var64=0;

for(var i=0,newvar='';i<=100;i++)
{
    if('var'+i in window)
        newvar+='var'+i+'='+window['var'+i]+';';
}

alert(newvar);

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Kan je niet een array genereren?

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
var Vars = Array();
Vars[1] = 64;
Vars[55] = "Test";
Vars[64] = 0;

var newVar = '';

for(Var in Vars)
    newVar += Var+'='+Vars[Var]+';'; 
//Maakt: 1=64;55=Test;64=0;

alert(newVar);

[ Voor 3% gewijzigd door TJHeuvel op 24-12-2008 11:45 ]

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op dinsdag 23 december 2008 @ 21:11:
Ik zou de 'in' operator gebruiken (werkt alleen niet met IE5.0 en lager)
Bedankt, maar dat kan ik niet gebruiken; het moet ook met oude browsers werken. :|
CyCloneNL schreef op woensdag 24 december 2008 @ 11:44:
Kan je niet een array genereren?
JavaScript:
1
2
3
4
var Vars = Array();
Vars[1] = 64;
Vars[55] = "Test";
Vars[64] = 0;
Ow, dan ben ik waarschijnlijk niet duidelijk genoeg geweest. Die var1 var55 etc. worden server side gegenereerd. Ik heb daar geen verdere invloed op. Maar die oplossing zou wel ideaal zijn.

Dus het kan niet beter dan wat ik gemaakt heb (met uitzondering van crisp's loop i<=100;i++ in plaats van mijn i<101;i++) .

Acties:
  • 0 Henk 'm!

  • Peter
  • Registratie: Januari 2005
  • Laatst online: 13-09 17:10
Verwijderd schreef op woensdag 24 december 2008 @ 12:24:
Bedankt, maar dat kan ik niet gebruiken; het moet ook met oude browsers werken. :|
IE 5 heeft een marktaandeel van 0.05% (bron), wat misschien nog enkele embedded systemen op '98 (of zelfs '95) gebruiken, en misschien een enkele bank/basisschool. Dat is echt bijna verwaarloosbaar..

[ Voor 4% gewijzigd door Peter op 24-12-2008 12:30 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op woensdag 24 december 2008 @ 12:24:
[...]

Bedankt, maar dat kan ik niet gebruiken; het moet ook met oude browsers werken. :|
definieer dan eens wat die 'oude browsers' zijn waar het nog op moet werken? IE4? NS3? Opera 1.0? :P

Als IE5(.0) nog van belang is (kan het me haast niet voorstellen), dan zal je moeten checken op undefined...

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op woensdag 24 december 2008 @ 12:24:
Bedankt, maar dat kan ik niet gebruiken; het moet ook met oude browsers werken. :|
Als dat echt belangrijk is zou je dit kunnen gebruiken i.p.v. in:
JavaScript:
1
if(typeof window['var' + i] != 'undefined')

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Peter schreef op woensdag 24 december 2008 @ 12:29:
[...]
IE 5 heeft een marktaandeel van 0.05% (bron), wat misschien nog enkele embedded systemen op '98 (of zelfs '95) gebruiken, en misschien een enkele bank/basisschool. Dat is echt bijna verwaarloosbaar..
Op een high traffic site kunnen dat toch een paar honderd bezoekers per dat zijn. Mijn code mag nooit de oorzaak van een script-error zijn. Juist banken en gebruikers met embedded devices zijn een erg belangrijke doelgroep en ze zijn niet in staat om eenvoudig hun browser te updaten.
crisp schreef op woensdag 24 december 2008 @ 13:16:
[...]
definieer dan eens wat die 'oude browsers' zijn waar het nog op moet werken? IE4? NS3? Opera 1.0? :P
Als IE5(.0) nog van belang is (kan het me haast niet voorstellen), dan zal je moeten checken op undefined...
Klopt, IE4, NS4 en later.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Arme jij.... :+

Ik zou dan javascript ueberhaupt mijden als het even kan...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-09 16:31

Bosmonster

*zucht*

Verwijderd schreef op woensdag 24 december 2008 @ 15:14:
[...]

Op een high traffic site kunnen dat toch een paar honderd bezoekers per dat zijn. Mijn code mag nooit de oorzaak van een script-error zijn. Juist banken en gebruikers met embedded devices zijn een erg belangrijke doelgroep en ze zijn niet in staat om eenvoudig hun browser te updaten.


[...]

Klopt, IE4, NS4 en later.
Volgens mij zijn juist banken degenen die dit soort browsers niet meer (willen) ondersteunen, gezien de dramatisch slechte beveiliging.

Een belangrijkere doelgroep om rekening mee te houden is simpelweg mensen zonder javascript, dan heb je het niet over 0,05%, maar al snel 5%. Had je daar al aan gedacht met deze javascript-oplossing? ;)

[ Voor 3% gewijzigd door Bosmonster op 24-12-2008 16:40 ]


Acties:
  • 0 Henk 'm!

  • Blue-eagle
  • Registratie: September 2000
  • Niet online
Als javascript variabelen serverside naar de client worden gestuurd zullen de gebruikers ook javascript wel aan hebben staan, of het zal niet relevant zijn voor de paar mensen die dit niet aan hebben staan :)

Hoe dan ook, kan je niet bij de server-side software? Het lijkt me makkelijker en veiliger om aan die kant een extra JS-variabele aan te maken, in plaats van een client-side loopje uit te laten voeren.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-09 16:31

Bosmonster

*zucht*

Blue-eagle schreef op woensdag 24 december 2008 @ 16:48:
Als javascript variabelen serverside naar de client worden gestuurd zullen de gebruikers ook javascript wel aan hebben staan, of het zal niet relevant zijn voor de paar mensen die dit niet aan hebben staan :)
Die logica ontgaat me even. Omdat de pagina gegenereerd wordt met javascript erin heeft iedereen ineens javascript ondersteuning (enabled)? :P

Als het niet relevant is voor die paar procent van de mensen, dan is <IE5 en NS4 ondersteuning al helemaal niet nodig natuurlijk, want die paar hondersten van procenten zijn pas echt verwaarloosbaar.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Blue-eagle schreef op woensdag 24 december 2008 @ 16:48:
Als javascript variabelen serverside naar de client worden gestuurd zullen de gebruikers ook javascript wel aan hebben staan, of het zal niet relevant zijn voor de paar mensen die dit niet aan hebben staan :)
Bosmonster schreef op woensdag 24 december 2008 @ 16:52:
[...]
Die logica ontgaat me even. Omdat de pagina gegenereerd wordt met javascript erin heeft iedereen ineens javascript ondersteuning (enabled)? :P
Ik snap wel wat Blue-eagle bedoelde. Die JavaScript variabelen kunnen toch niet opgepakt worden door browsers die geen JavaScript ondersteunen.

En natuurlijk zou een server-side oplossing beter zijn, en niet afhankelijk van browser-versies. Helaas is de situatie niet zo. :/ Ik ben afhankelijk van een aantal variabelen die server-side in de pagina worden gezet. Die pagina is door verschillende server-side portlets opgebouwd die niet met elkaar praten. Elke portlet exposed weer eigen variabelen. Server-side wil/kan men geen aanpassingen maken en ik heb beperkte ruimte beschikbaar om met JavaScript al die variabelen samen te voegen.

De discussie over of banken nu wel of niet Nashville (IE4) nog gebruiken kunnen we wel hier gaan voeren maar is niet echt relevant (en neem maar van mij aan dat ze dat WEL gebruiken, met alleen toegang tot het intranet).

Acties:
  • 0 Henk 'm!

  • Blue-eagle
  • Registratie: September 2000
  • Niet online
Maybe offtopic: Heb je niet geheel ontoevallig te maken met een Liferay omgeving? Edit: Gewoon out of interest ;)

[ Voor 16% gewijzigd door Blue-eagle op 26-12-2008 00:04 ]

Pagina: 1