11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je suis tout nouveau sur le forum, je voudrais tout d'abord féliciter les auteurs du site car il y a des superbes didacticiels.

Bref, je reviens à mon problème

Sur un site web que je suis en train de faire je veux insèrer une image (pplusieures en fait, mais ce n'est pas grave) dynamiquement, je fais donc, dans une fonction un truc du genre :

var link = opener.document.createElement('img');  
link.setAttribute('src',NOM DU FICHIER);  
link.setAttribute('class','imggauche')  
para.insertBefore(link,para.firstChild);

Le problème est que, tout marche très bien sauf qu'il m'insère l'image comme ça:
<img class="imggauche" src="NOM DU FICHIER" >

Le problème, me diriez-vous? La balise ne se ferme pas!! /> et quand je veux traiter les données avec les méthodes DOM de php je ne peux pas faire car la balise ne se ferme pas.

Voilà, si quelq'un à une solution, soit pour fermer la balise, soit pour que les méthodes DOM de php ne prennent ca en compte, je vous en remercirait eternellement.

Merci!!!
Modifié par Orgies (18 Jan 2007 - 11:54)
En PHP tu pourrais analyser le fichier à la recherche de cette anomalie et la corriger avant d'appliquer les méthodes DOM non ?
Ben, j'amerais bien savoir faire, le problème en php c'est que l'erreur vienne du constructeur de la classe:
$a = new domDocument();
$a->loadHTML(document html);

et pim, la ça plante
à la limite je pourrais chercher l'ocurrence de la chaine donc : " >
mais je crois pas que ce soit une très bonne solution.
Dans tous les cas, j'avais pas pensé à faire cela, mais j'attends un peu voir si vous pouvez m'apporter une solution.

Merci!!
Côté serveur, il suffit d'appliquer une expression régulière à la chaîne avant de l'envoyer dans la moulinette XML/DOM.
Côté navigateur par contre, tu n'y pourras pas grand chose... par exemple IE utilise quoi qu'il arrive la syntaxe HTML 4.01 avec le nom des balises en majuscule en prime, et ce n'est pas modifiable.

L'expression régulière à appliquer n'est pas si compliqué que ça :

$chaine = preg_replace("#<(img.*?)>#i", "<$1 />", $chaine);
Uff, pas mal Smiley lol
J'ai opté pour un truc beaucoup plus laid :
$contenu = str_replace('jpg%22%3E','jpg%22%2F%3E',$contenu);
avant bien sur de faire un urldecode()
Mais si ton truc marche, ca peut etre bien plus interessant
Ooo, ça marche niquel ^^
Je n'ai pas encore compris grand chose aux expressions régulieres, dont je n'ose pas du tout m'y aventurer, en tout cas,
Merci beaucoup!!
Orgies a écrit :
Ooo, ça marche niquel ^^
Je n'ai pas encore compris grand chose aux expressions régulieres, dont je n'ose pas du tout m'y aventurer, en tout cas,
Merci beaucoup!!


Considères-tu que ce sujet est résolu ? Dans ce cas n'oublie pas de l'indiquer dans le titre pour pouvoir le retrouver plus facilement par la suite.