11548 sujets

JavaScript, DOM et API Web HTML5

bonjour,
voila, je génère une page html complète que je stoque dans une variable.
ma variable (appelons la "MaVariable") contient:

<html>
	<head>
		<link src="..." />
	</head>
	<body>
		<div id="madiv1">contenu1</div>
		<div id="madiv2" class="plein de classes">
			contenu2
		</div>
		<div id="madiv3">contenu3</div>
	</body>
</html>

je dois isoler les éléments en x partie (disons 4 parties) comme suit:

partie1:
<html>
	<head>

partie2:
		<link src="..." />
	</head>
	<body>
		<div id="madiv1">contenu1</div>

partie3:
		<div id="madiv2" class="plein de classes">
			contenu2
		</div>

partie4:
		<div id="madiv3">contenu3</div>
	</body>
</html>

et donc, je dois stoquer chaque parties dans des variables afin de les manipuler individuellement.
le problème, c'est que je génère dynamiquement "plein de classes", et qu'il sera différent a chaque foie.

la grande question, est-que c'est possible....
j'ai cru comprendre que les regex devraient m'aider, mais je bloque sévère Smiley lol (surtout au niveau de la partie 3 avec sa partie dynamique)

voilou,
si quelqu'un a une idée, une piste, une blague Smiley smile je suis preneur

cordialement.
Modifié par Giz (19 Jun 2011 - 04:11)
Si tu expliquais exactement ce que tu souhaites faire au final on pourrait peut être te proposer des solutions alternatives.
Bonjour à toutes et à tous,

si j'ai bien compris, tu as un script HTML qui est toujours le même et à certains endroits tu désires paramétrer ces zones en effectuant une substitution de chaine de caractères. Par exemple, voici le code HTML stocké dans ta variable "MaVariable" :

<html>
<head>
<title>x1x</title>
<link type="text/css" src="x2x" />
</head>

<body>
<p>x3x</p>
</body>
</html>


Et là où tu as un 'xNx' tu désires mettre une nouvelle chaine de caractères par substitution.

A faire en Javascript :
MaVariable.replace(/(x1x)/g, "exemple de substitution");
MaVariable.replace(/(x2x)/g, "Script.css");
MaVariable.replace(/(x3x)/g, "ca marche très bien");


(x1x) veut dire toutes les occurrences de la chaine x1x.

J'ai testé le replace sur un petit exemple chez moi !

@+
Giz a écrit :
merci pour vos réponses
en fait, je ne sais même pas si les regex sont nécessaire.

je crois que j'ai donner trop de détails
en simple:
j'ai une variable, qui contient du code html, une partie de ce code est différent a chaque foie.
(je ne le choisis pas ca se génère, et cette partie change a chaque foie), une autre partie de ce code est statique

et je souhaite &quot;découper&quot; le contenu de cette variable à des &quot;endroits précis&quot;
pour former plusieurs variable.

en gros...
un coup MaVariable va contenir

<div id="1"></div>
<div id="MonId" class="[b]classA classB[/b]"></div>
<div id="2"></div>

et une autre foie ,elle contiendra (jamais deux fois la meme)

<div id="1></div>
<div id="MonId" class="[b]classX classV classM[/b]"></div>
<div id="2"></div>

et toujours en simple, je souhaite découper entre chaque div
(dans mon code il ne sagit pas de div mais juste d'un contenu statique)

Modifié par Giz (18 Jun 2011 - 21:29)
alors, j'ai trouver , il ne fallait pas utiliser les regex,
juste utiliser:
substring(a, b)

(permet d'extraire une chaîne à partir de la position a jusqu'à la position b)

voila merci pour vos réponses
Bonjour à toutes et à tous,

et comment tu calcules ta position a et b dans ton substring ?

Car dans ta variable 'MaVariable', je ne pense pas que les balises que tu désires extraire sont forcément toujours à la même position !

voici un exemple d'extraction avec le regexp :

<html>
<head>
<title>test</title>
<script type="text/javascript" language="javascript">
function test()
{
	var parse_chaine = /^(.*)(?:x1x)(.*)(?:x2x)(.*)(?:x3x)(.*)$/;

	var chaine = "ca x1x marche x2x très bien x3x bla bla";

	var result = parse_chaine.exec(chaine);

	var names = ['chaine', 'x1x', 'x2x', 'x3x', 'fin'];
	
	var blanks = '            ';
	
	for (var i=0; i<names.length; i++)
	{
		document.write(names[i] + " : " + blanks.substring(names[i].length) + result[i] + "<br />");
	}
}
</script>
</head>

<body onload="test();">
</body>
</html>


@+[/i][/i][/i]
Modifié par Artemus24 (19 Jun 2011 - 14:07)