Bonjour,

J'ai un souci, j'utilise une fonction sur un document XML pour le transformer en un table, jusque ici rien de plus classique et cela marche très bien temps qu'il y a seulement du texte dans les cellules.

Le soucis c'est que j'aimerai que javascript interprète directement en HTML les contenus des cellules plutôt que de faire un teste sur les multiples possibilité de nœuds enfant existant (lien, img, tableau, span ... ).

En effet mes deux dernières cellules de l'exemple contiennent des balises enfant ceux qui doit faire une erreur sur la methode document.createTextNode().

Je pensais mettre au lieu de ca un innerHTML sur toutes les noeuds enfants de la cellule afin d'éviter de faire une longue liste de conditions ?

Connaissez vous une autre méthode, ou comment utiliser le innerHTML dans ce cas ?

Page ajax.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
<?php
header("Content-Type: text/xml");
include('../includes/paramettre.php');
 
        $bdd= new PDO($dsn,$user,$pass);
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
 
/* PAGE ADMIN_ENTRAINEUR_MES_JOUEURS */
if(isset($_POST['liste_joueurs']))
{
        $ordre='ORDER BY licencie.nom';
        $query="SELECT licencie.*,equipes.equipe_nom,equipes.genre FROM licencie LEFT JOIN equipes ON licencie.equipe_id=equipes.forum_id $ordre";
        $reponse=$bdd->query($query);
        $array_liste_joueurs=$reponse->fetchALL();
        $liste_joueurs="<table>";
        //On assigne les valeurs
        foreach($array_liste_joueurs AS $value)
        {
                $liste_joueurs.='
                        <tr>
                        <td>'. $value['num_licence'] .'</td>
                        <td>'. $value['nom'] .'</td>
                        <td>'. $value['prenom'] .'</td>
                        <td>'. $value['sexe'] .'</td>
                        <td>'. $value['annee_naissance'] .'</td>
                        <td>'. $value['poste'] .'</td>
                        <td>'. $value['equipe_nom'] .' '. $value['genre'] .'</td>
                        <td><a href="admin.php?onglet=entraineur&partie=suivi_joueur&id_joueur='. $value['id_lic'] .'" title="Suivre ce joueur"><img src="images/structure/acces.png" alt="accès au lien"/></a></td>
                        <td><input type="checkbox" value="'. $value['id_lic'] .'"/></td>
                        </tr>   ';
        }       
 
        echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>";
        echo $liste_joueurs;
        echo '</table>';
}
?>
Script JS (fonction : liste_joueurs):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
function getXMLHttpRequest() {
	var xhr = null;
 
	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			xhr = new XMLHttpRequest(); 
		}
	} else {
		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
		return null;
	}
 
	return xhr;
}
 
 
 
function request(callback,url,data,loader_id) {
	var xhr = getXMLHttpRequest();
 
	if(loader_id != undefined) {
		var image = document.getElementById(loader_id);
		var ancienne_image = document.getElementById(loader_id).src;
	}
 
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
			callback(xhr.responseXML);
			image.src = ancienne_image;
		}
		else if (xhr.readyState < 4 &&  loader_id != undefined) {
			image.src='images/structure/chargeur.gif';
		}
 
	};
 
	xhr.open("POST", url, true);
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xhr.send(data);
}
 
function liste_joueurs(data)
{
	var nodes   = data.getElementsByTagName("tr");
	var tr = document.createElement("tr");
	ChildNodes = nodes[0].getElementsByTagName("td");
 
	for(var i=0, c=nodes.length; i<c; i++) {			
		tr = document.createElement("tr");
		ChildNodes = nodes[i].getElementsByTagName("td");
 
		for(var i2=0, c2=ChildNodes.length; i2<c2; i2++) {
			td = document.createElement("td");
			texte  = document.createTextNode(ChildNodes[i2].firstChild.data);
			td.appendChild(texte);
			tr.appendChild(td);
		}
 
 
		document.getElementById("liste_joueurs").appendChild(tr);
	}
}
PS : Pq lorsque je lance la page ajax.php, Firefox me dit que le document XML n'est pas valide alors qu'il est pris sans erreur dans le script JS ?