11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
J'ai une page qui contient un grand nombre de liens internes que je pousse sur deux espaces de site perso
1) free .
2) Orange.

Je voudrais bien modifier les liens dynamiquement en fonction de window.location.href

J'ai tenté pas mal de propositions trouvées sur Internet, rien ne fonctionne.
<!--
<body id="Body" name="Body" onload="Init(); ">
-->

<body onload="Init(); ">


Dans un premier temps je tente des remplacements rudimentaires, rien ne fonctionne Smiley decu
function Init(){
	//alert("INIT: ");
	window.document.getElementById("Début").value = 0;
	window.document.getElementById("Fin").value = 111;
	window.document.getElementById("TOUT").value = "Tout";
	window.document.getElementById("TOUT").style.color = "#00000";
	window.document.getElementById("TOUT").disabled = false;
	window.document.getElementById("Latin").disabled = false;
	window.document.getElementById("Saisset").disabled = false;
	window.document.getElementById("Appuhn").disabled = false;
	window.document.getElementById("Koyré").disabled = false;
	window.document.getElementById("Moreau").disabled = false;
	
	console.log ("LOG=" + window.location.href);

/* Dans un premier temps je tente un remplacement rudimentaire - ça ne fonctionne pas */
//	var Body = window.document.getElementById('Body');
//	var Body = window.document..getElementsByTagName('Body');

	var HTML = document.body.innerHTML;
	var regex = /TRAITÉ/g;
	console.log(regex.test(HTML)); /* True */
	HTML.replace(regex, 'COUCOU');
	document.body.innerHTML = HTML;
	
/* Alors que j'aurais besoin d'un replaceAll - ceci ne fonctionne pas non plus : */
//	HTML.replaceAll(regex, 'COUCOU');
//	document.body.innerHTML = HTML;

}

/* J'ai même essayé de tout effacer en dehors d'une fonction, donc à l'exécution du javascript - RIEN de TOUT ça ne fonctionne : */
//document.body.innerHTML = '';
//document.write('');
//document.clear();


La page en cours de création est :
http://spinoza.texte.free.fr/Moreau/TRE_NOUV.html

Je dois louper quelque chose d'énorme, mais quoi ?
Merci d'avance !
Modifié par dmganges (05 Jul 2021 - 05:15)
Slt slt,

j'ai pas vraiment compris. Tu veux remplacer quel éléments ?

j'ai compris que tu voulais remplacer des tag par rapport à ton url courante (location.href)

En gros, tu veux remplacer tous les /TRAITÉ/g de ta page par COUCOU ?

mais dans ta page je ne vois aucun /TRAITÉ/g
Modifié par JENCAL (05 Jul 2021 - 12:56)
Tu as cette solution aussi pour récupérer TOUT les elements d'un page :

var all = document.getElementsByTagName("*");

for (var i=0, max=all.length; i < max; i++) {

}


"*" va chercher tout les éléms Smiley smile
Bonjour et merci JENCAL de t'être intéressé à mon problème bien que je l'aie mal posé...

Donc je réponds d'abord à ton premier message.
Il s'agit de modifier un grand nombre d'URL dans deux pages qui contiennent chacune un livre complet.
- Pour info une première page contient déjà un peu plus de 1800 URL qui servent uniquement à naviguer à l'intérieur du texte.
- L'autre pour l'instant seulement une dizaine, mais les deux textes se complètent, je vais donc avoir plusieurs centaines d'URL également dans la deuxième page (>8300 lignes), qui pointeront sur la première, mais jamais à l'extérieur sur le net.

J'ai deux espaces de pages perso, un chez free l'autre chez Orange.

Je pousse l'ensemble de mon petit site sur les deux espaces.
Donc sur chacun d'eux, les débuts d'URL internes sont différentes :
http://spinoza.texte.free.fr/
https://spinoza.pagesperso-orange.fr/

Je ne veux pas me peler la maintenance de deux sites quasiment identiques.

Donc mon idée : je sais sur quel espace je me trouve avec :
window.location.href

à partir de là, la manœuvre semblait évidente, suivant ce que me renvoie window.location.href je modifie d'un coup, d'un seul Smiley biggrin toutes les URL de la page, je ne suis pas un As de la regex, mais ça doit donner à peu près çà :

var HTML = document.body.innerHTML;
var regex = /http:\/\/spinoza\.texte\.free\.fr/g;
console.log(regex.test(HTML)); /* True */
HTML.replaceAll(regex, 'https://spinoza.pagesperso-orange.fr');
document.body.innerHTML = HTML;

console.log renvoie bien "True"

Enfin c'est ce que j'ai trouvé en plusieurs endroit sur Internet, mais autant c'est périmé... il peut y avoir mieux ???

J'ai même trouvé :
document.body.innerHTML = '';

ICI : https://developer.mozilla.org/fr/docs/Web/API/Element/innerHTML
Last modified: 4 juil. 2021, by MDN contributors
Et ça n'efface que dalle !

...
Donc lorsque j'ai vu que ça ne modifiait rien j'ai tenté une modif rudimentaire : Remplacer dans la page le premier mot : "TRAITÉ" par "COUCOU".
Et là rien non plus, j'ai donc appelé au secours !

Concernant ton deuxième message, je voudrais éviter de faire une usine à gaz en parcourant toutes les balises... si on peut le faire en 4 lignes... Sinon bien sûr je m'y collerait...

Je précise que j'ai contrôlé le balisage de ma page html, mon éditeur est Ultraedit, qui colorie la correspondance des balises.
Mes deux balises <body> et </body> se bornent correctement.
Et encore une fois le test de la regex revoie bien True, c'est du côté replace et replaceAll ou le :
document.body.innerHTML = HTML;
que ça bloque...
OK je comprend un peu mieux;

Mais j'ai repérer un truc sur ton site, tu as des chemins relatifs.. donc pourquoi ne passer par ça pour chaque lien a href ?

exemple :

<a href="./Ethique.html#E2">DEUXIÈME PARTIE</a>


là pas de problème de d'url.

d'ailleurs, je ne trouve aucun balise <a> avec un lien absolue... aurais-tu un exemple ?
Modifié par JENCAL (05 Jul 2021 - 15:48)
pour infos, je reviens sur ton 1er javascript

var HTML = document.body.innerHTML;
	var regex = /TRAITÉ/g;
	console.log(regex.test(HTML)); /* True */
	HTML.replace(regex, 'COUCOU');
	document.body.innerHTML = HTML;


ton replace te renvoi un string. il ne change pas le string sur lequel il est accroché. il faut donc le stocker dans une variable à utiliser par la suite.


	HTML = HTML.replace(regex, 'COUCOU');
	document.body.innerHTML = HTML;


en sachant que faire ça... c'est pas bien Smiley smile

il faudrait faire, soit tout en chemin relatif, soit parcourir uniquement chaque balise <a> et modifier le href dans une boucle.
Modifié par JENCAL (05 Jul 2021 - 15:58)
Meilleure solution
Encore merci Smiley cligne
Tu trouveras qq liens absolus dans l'autre fichier :
http://spinoza.texte.free.fr/Moreau/TRE_NOUV.html
par exemple si avec <CtrlF> tu recherches : E4P68S

Là il va te ramener sur le premier fichier.
Bien sûr à l'intérieur d'un espace je pourrais faire en relatif.
C'est que je suis un peu flemmard, là en local je gère deux environnements !!!... qui finissent par être différents et je ne sais plus où j'en suis...
Je voudrais avoir qu'un seul environnement en local.
Le window.location.href et qq lignes de javascript me plasait beaucoup...
OK je n'avais pas vu :

HTML = HTML.replace(regex, 'COUCOU');

Habitué à faire du Perl...
je reviens...
SUPERBE JENCAL
c'était çà mon énormité :
Donc çà c'est OK :

var HTML = document.body.innerHTML;
	var regex = /http:\/\/spinoza\.texte\.free\.fr/g;
	alert("regex = " + regex.test(HTML));
	console.log(regex.test(HTML)); /* True */
	HTML = HTML.replaceAll(regex, 'https://spinoza.pagesperso-orange.fr/');
	document.body.innerHTML = HTML;


Je le pousse sur free à l'ocase tu pourras vérifier

ENCORE MERCI

Je ne préoccupe pas trop de la norme...
Pour tout dire il faut que ça tourne sur un Firefox 27.0 sur lequel je me suis fait un add-on <CtrlF> qui me permet de faire des recherches époustouflantes notamment en regex...
Manque de chance il ne tourne pas correctement sur les nouveaux FF.
Pas le temps, pas assez compétent, autre chose à faire...
Je fais tourner mon FF 27.0 en local avec un serveur apache...
Tout çà pour faire des recherches pointues dans ces textes incontournables...
Modifié par dmganges (05 Jul 2021 - 16:18)
Ça y est c'est poussé sur free
E4P68S me ramène bien sur Orange :

MERCI !!!

Je vais pouvoir faire le ménage !
Modifié par dmganges (05 Jul 2021 - 16:16)