Manipulation de string avec javascript

Bonjour à tous,

Bien que j’ai un lourd passé de dev web, ça faisait un moment que je n’y avais plus touché, et aujourd’hui : je galère.

Peut être que certains d’entre vous me mettrons sur une piste pour arriver à faire ce que j’ai envie.

L’objectif :
j’ai une “table” de reférences qui permet de customiser mon animation flash. C’est un problème de javascript.

La contrainte :
le format de ma “table” (un faux csv, vous allez voir) ne doit pas changer. ça doit être utilisable par des gens qui savent modifier un fichier html mais à qui ça fera chier de faire plus (et pour l’isntant je suis encore en bas de l’échelle, donc quand quelqu’un n’a pas envie de faire qqchose, c’est dans ma boite mail que ça atteri).

Concrétement, j’ai mis ma table dans un , ensuite : mon javascript lit ce qu’il y a dans le div et le reste fonctionne tout seul

j’ai donc :
[codebox]


1,2,3
4,5,6
7,8,9

[/codebox]

Ce sera de toutes façons des triplets, mais peut y en avoir un beaucoup.

Le résultat souhaité est un string genre “1,2,3,4,5,6” ou un array. Enfin bref, tant que je peux le traiter facilement ça me va.

je passe fonc par un var myJumpTable = document.getElementById(‘jumpTable’).innerHTML;

et ensuite dans ce truc je suppose que j’ai des caractère spéciaux du fait du passage à la ligne que j’arrive pas à enlever.

Je vais demander à des gens qui sont pas forcément des téchos de modifier cette table, donc il faut que ça reste le plus simple et le plus accessible: ce qu’il y a dans le div n’est donc pas à remettre en question.

J’imagine que le problème se règle avec myJumpTable.replace() ? mais je sèche! Quels sont les caractères spéciaux que j’arrive pas à supprimer?

Toute aide, piste, ou quoi que ce soit sera grandement apprécié!

En vous remerciant.

salut,
Tu peux associer un split de la chaine à une expression reguliere. Tu obtiendrais un chouette tableau.

Par ex:

var innerHTML = document.getElementById(‹ jumpTable ›).innerHTML;
var regexp = new Regexp([^\d],[^\d]); // une virgule entourée de tout ce qui n’est pas un chiffre
var tableauChiffres = innerHTML.split(regexp);

Le defaut : si les gens qui alimentent la page sont vraiment farceurs, il peut y avoir des problemes ( par exemple ils mettent une balise html dans ton div avec un chiffre du style )

ps : Evidemment les chances que ce code ecrit à la va vite fonctionne directement sont quasi nulles hein :slight_smile:

Les caractères que tu cherches sont chr(10) (\n : new line) et chr(13) : (\r : carriage return)
et en passant, le chr() en javascript, c’est String.fromCharCode().

hope this helps

edit: du code completement dégueu

[code]function $(elt) { return document.getElementById(elt); }

var toto = $(‘jumpTable’).innerHTML;
var lines = toto.split(’\n’);

for (i=0; i<lines.length; ++i)
{
if (lines[i]!=’’)
{
var elems = lines[i].split(’,’);
for (j=0; j< elems.length; ++j)
{
alert(elems[j]);
}
}
}[/code]

Merci beaucoup pour vos pistes, mais j’arrive toujours pas à faire marcher ce truc!

La solution des expressions régulières me parait sympa mais ne veut pas fonctionner (l’autre non plus d’ailleurs)

[code]function $(elt) { return document.getElementById(elt); }

function jump{
var rawValues = $(‹ jumpTable ›).innerHTML;
var regexp = new RegExp("^\d,\d,\d");
var tableauChiffres = rawValues.split(regexp);
alert(tableauChiffres);
}[/code]

tableauChiffres contient encore et toujours 1,2,3 4,5,6 etc.

j’ai testé l’expression régulière ici : http://gskinner.com/RegExr/ et elle est correcte. Pourquoi ça ne marche pas dans javascript???

quand à l’autre solution j’ai essayé d’éliminer les caractères spéciaux :

var rawValues = $('jumpTable').innerHTML; rawValues = rawValues.replace(" ","!").replace(String.fromCharCode(13), ".").replace("\n", ";").replace(String.fromCharCode(10), "?"); alert(rawValues);

mais en gros, à part un espace à un endroit (qui n’est pas censé être là d’ailleurs) y’a rien qui part…

Help, please :slight_smile:

[quote=« the_webrunner, post:4, topic: 48209 »][code]function $(elt) { return document.getElementById(elt); }

function jump{
var rawValues = $(‹ jumpTable ›).innerHTML;
var regexp = new RegExp("^\d,\d,\d");
var tableauChiffres = rawValues.split(regexp);
alert(tableauChiffres);
}[/code][/quote]

Mais… mais… t’as pas mis l’expression exacte :slight_smile:

Et ca fait quoi avec var regexp = new Regexp("[^\d]*,[^\d]*");

Ok, je viens de m’apercevoir de ma connerie, j’utilisais la fonction split “à l’envers”, en gros je donnais les trucs à inclure au lieu de ceux à exclure.

Bref,

mais ta suggestion ne fonctionne malheuresement pas…

Holy shit, la regexp était foireuse, en plus je prenais pas en compte le fait qu’il y avait des separateurs differents de ‘,’

function jump(){ var rawValues = $('jumpTable').innerHTML; alert(rawValues); var regexp = new RegExp("[^0-9]"); var tableauChiffres = rawValues.split(regexp); for (j=0; j < tableauChiffres.length; j++) { alert(tableauChiffres[j]); } }

Il semble que [^\d] ne fonctionne pas d’ailleurs, d’ou le [^0-9]