Page 1 sur 2

récuprer un élément

Posté : 02 févr. 2007, 18:31
par artotal
Bonjour,
je cherche à récupérer la liste des lien (le contenu) qui se trouve dans une liste :
Sa ne fonctionne pas.

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans titre</title> <style> html body{padding:0px;margin: 0px;} </style> </head> <body> <a href="#">aaaaa</a> <ul id="menu"> <li><a href="#">aaaaa</a></li> <li><a href="#">bbbbb</a></li> <li><a href="#">ccccc</a></li> <li><a href="#">ddddd</a></li> </ul> <script type="text/javascript"> var elementMenu=document.getElementById("menu"); if(elementMenu != null) { menu = elementMenu.document.getElementsByTagName("a"); if(menu.length == 0) { return false; } else { document.write("lise des liens 'a' dans l'élément 'menu' :<br />"); var i; for(i = 0; i< menu.length; i++) { document.write(menu[i].innerHTML, "<br />"); } } } else { return false; } </script> </div> </body> </html>
Merci

Re: récuprer un élément

Posté : 02 févr. 2007, 19:04
par artotal
Bonjour,
je cherche à récupérer la liste des lien (le contenu) qui se trouve dans une liste :
http://creatif-web.be/developpeur/test.php#
Sa ne fonctionne pas.

Code : Tout sélectionner

<ul id="menu"> <li><a href="#">aaaaa</a></li> <li><a href="#">bbbbb</a></li> <li><a href="#">ccccc</a></li> <li><a href="#">ddddd</a></li> </ul> <script type="text/javascript"> var element=document.getElementById("menu"); if(element != null) { menu = element.document.getElementsByTagName("li"); if(menu.length == 0) { // vide document.write("Vide"); } else { document.write("lise des liens 'a' dans l'élément 'menu' :<br />"); var i; for(i = 0; i< menu.length; i++) { document.write(menu[i].innerHTML, "<br />"); } } } else { // vide document.write("Vide"); } </script>
Merci

Posté : 02 févr. 2007, 19:08
par artotal
C'était l'erreur

Code : Tout sélectionner

menu = element.getElementsByTagName("li");
Mais comment faire si je veux récupérer chaque lien dans une valeur differente ?

Code : Tout sélectionner

<ul id="menu"> <li><a href="#">aaaaa</a></li> <li><a href="#">bbbbb</a></li> <li><a href="#">ccccc</a></li> <li><a href="#">ddddd</a></li> </ul> <script type="text/javascript"> var element=document.getElementById("menu"); if(element != null) { menu = element.getElementsByTagName("a"); if(menu.length == 0) { // vide document.write("Vide"); } else { //document.write("lise des liens 'a' dans l'élément 'menu' :<br />"); var i; for(i = 0; i< menu.length; i++) { //var lien; var lien= menu[i].innerHTML; document.write(lien); } } } else { // vide document.write("Vide"); } </script>

Posté : 03 févr. 2007, 23:04
par Chakra Spirit
Rebonjour, :wink:

Tu peux faire ainsi :

Code : Tout sélectionner

function fnInit() { if(!document.getElementsByTagName) return; var oUl = document.getElementsByTagName('ul')[0]; if(!oUl) return; var oLi = oUl.getElementsByTagName('li'); if(oLi.length == 0) return; var aLink = [], iI = 0, iCount = oLi.length; for(; iI < iCount; iI++) if(oLi[iI].getElementsByTagName('a')[0]) { aLink[iI] = oLi[iI].getElementsByTagName('a')[0].lastChild.data; alert("aLink[" + iI + "] contient " + aLink[iI]); } } window.onload = fnInit;

Posté : 04 févr. 2007, 01:05
par artotal
En faite j'ai trouvé une réponse :
<ul id="menu">
<li><a href="#">aaaaa</a></li>
<li><a href="#">bbbbb</a></li>
<li><a href="#">ccccc</a></li>
<li><a href="#">ddddd</a></li>
</ul>
<script type="text/javascript">
var element=document.getElementById("menu");
	if(element != null)
	{
		menu = element.getElementsByTagName("a");
		if(menu.length == 0) 
		{
			// vide
			document.write("Vide");
		}
		else
		{
			var i;
			//menu.onclick=function() 
			//{
			var str='';
				for(i = 0; i< menu.length; i++) 
				{	
					//var lien;
					var lien= menu[i].innerHTML;
					document.write(lien+"clic ici<br />");
					alert(str += lien);
					//document.write(lien+"<br />");
				}
			//}
		}
	}
	else
	{ 
		// vide
		document.write("Vide");
	}

</script>

Posté : 04 févr. 2007, 01:07
par artotal
Et bon ce que j'ai fais en js ne me récupère que un seul clic.

Posté : 04 févr. 2007, 01:33
par artotal
par contre j'ai fais un test et j'ai bien au clic du lien l'alert qui se déclanche
Mais sa ne récupère pas le clic
<ul id="menu">
<li><a href="#">aaaaa</a></li>
<li><a href="#">bbbbb</a></li>
<li><a href="#">ccccc</a></li>
<li><a href="#">ddddd</a></li>
</ul>
<script type="text/javascript">
var element=document.getElementById("menu");
if(element != null)
{	
	menu = element.getElementsByTagName("a");
	var i;
	var str='';
	for(i = 0; i< menu.length; i++) 
	{	
		//var lien;
		var lien= menu[i].innerHTML;
		//document.write(lien+"clic ici<br />");
		document.write(lien);
		alert(str);
	}
}
/*window.onload= function () {
	appel();
}*/
</script>
Viens de me rendre compte que rien ne fonctionne sous ie

Posté : 04 févr. 2007, 02:00
par Ajoloca
Bonsoir,

Je ne comprends pas ce que tu cherches à faire.

Tu voudrais récupérer quoi ?
Pour le mettre où, et en faire quoi ?

Posté : 04 févr. 2007, 02:47
par artotal
j'ai trouvé je me suis servis d'une méthode de prototype.

http://creatif-web.be/developpeur/dossier_ajax4.php
@ajolca
je voulais récupérer une liste en php d'une table pour faire de l'ajax, donc fallait transformer ça en js, ma solution semble un peu lourde, j'utilise la méthode
Event.observe()

http://prototype.js.le-developpeur-web. ... erve().php

ce qui donne en code :
echo '<script type="text/javascript">';
$i=1;
$query = "SELECT * FROM pages order by page";
 $result = mysql_query($query, $lien);
	while($ok = mysql_fetch_array($result))
	{
	echo 'document.write("<li><a id=\"'.$ok['page'].'\" href=\"javascript:void(0);\">['.$ok['page'].']</a></li>");';
	$fonction=$ok['page'].$i++;
?>


function <?php echo $fonction;?>()
{	
	Event.observe("<?php echo $ok['page'];?>","click",envoie);
	function envoie()
	{
		alert("<?php echo $ok['page'];?>");	
	}
}
</script>


<script type="text/javascript">
function addLoadEvent(func)
{
   var oldonload = window.onload;
   if(typeof window.onload != 'function')
   {
      window.onload = func;
   }
   else
   {
      window.onload = function()
      {
         oldonload();
         func();
      }
   }
}

addLoadEvent(<?php echo $fonction;?>);
<?php }?>
</script>
</ul>
<script type="text/javascript">
var ajax = new Ajax.Updater(
					    'datestr',        // DIV id (XXX: doesnt work?)
					    '/developpeur/salut_php.php',        // URL
					    {                // options
					    method:'get', parameters:'page=23', 
					    onComplete: showResponse, evalScripts:true
						});

function showResponse(req)
{
	$('datestr').innerHTML = req.responseText;
	new Effect.toggle('datestr', 'BLIND');
	new Effect.Highlight('datestr', { startcolor:'#3366FF', endcolor:'#33CCFF', restorecolor:'#fff', duration: 1});
}
</script>
<p>2/ <div id="datestr" style="display:none;">hahaha</div></p>
parceque si j'ai trente lien sa risque d'être lourd, faut voir, moi mon FF prend 350mo, je ne peux pas trop m'en redre compte, sachant qu'il va y avoir autour de 20 liens pour se site !

Posté : 04 févr. 2007, 02:56
par artotal
pour répondre à ta question, c'est pour mettre la valeur cliquer en paramètre de la requete ajax, de cette façon, mes page en php seront inclus en ajax et tout est dynamique
lol

Posté : 04 févr. 2007, 03:04
par Ajoloca
Quand tu dis la valeur, de quelle valeur tu parles ?
L'attribut href ou bien la valeur affichée de l'élément qui vient d'être cliqué ?
Ou encore l'ensemble du contenu de l'élément <ul> ???
regarde ce bout de code, il sort sur une boite d'alerte la liste des <a> dans ton <ul>, si tu cliques sur un lien de l'ul il te sort l'URI à passer en paramètre à AJAX (fais un copier/coller, tu comprendras mieux).

Code : Tout sélectionner

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans titre</title> <style type="text/css"> html body { padding:0px; margin: 0px; } </style> <script type="text/javascript"> function getMenuElements(){ var listeLiens = 'Pas d\'éléments trouvés !'; if(elementMenu=document.getElementById("menu")) { var menu = elementMenu.getElementsByTagName("li"); if(menu.length){ for(var i = 0, listeLiens = ''; i < menu.length; i++) { listeLiens += menu[i].innerHTML + "\n"; } } } alert("Liste des liens :\n" + listeLiens); return; } function lienClique(url){ alert("Ici j'appelle AJAX avec paramètre : " + url); } </script> </head> <body> <a href="#">Lien avant l'ul (le click n'a pas d'effet)</a> <div> <ul id="menu"> <li><a href="JavaScript:lienClique('http://www.adr_1.eu/');">Lien ul 1</a></li> <li><a href="JavaScript:lienClique('http://www.adr_2.eu/');">Lien ul 2</a></li> <li><a href="JavaScript:lienClique('http://www.adr_3.eu/');">Lien ul 3</a></li> <li><a href="JavaScript:lienClique('http://www.adr_4.eu/');">Lien ul 4</a></li> </ul> <p><a href="Javascript:getMenuElements();">Cilck pour voir les liens dans l'ul</a></p> </div> </body> </html>
À partir de là dis-mois ce que veux.
Si c'est dans ce sens, je t'explique après le fonctionnement.

Posté : 04 févr. 2007, 04:03
par artotal
c'est exactement ça que je veux faire.
Effectivement on click et on a les liens il reste à intégrer ça à l'ajax. Mon code précédent ne fonctionne pas. Enfin avec ajax mais je crois que je vais laisser tomber prototype.
Peut être que de tout faire c'est mieux.
En faite dans l'idéal je voudrai que tout soit dynamique, donc je boucle ma table il en resort des valeurs et celle ci sont passer dans l'url ce qui me permet d'appeler mon contenu au clic sur le lien
Traditionnellement en php sa donne ça :
<?
include ("inc/connexion.php");
$query = "SELECT * FROM pages order by page";
$result = mysql_query($query, $lien);
while($ok = mysql_fetch_array($result))
{
echo '<li><a id="lien" href="'.$_SERVER['PHP_SELF'].'?page='.$ok['page'].'"'.$ok['page'].'</a></li>';
?>
Enfin à part le $_SERVER['PHP_SELF'], d'habitude on charge une page entière et donc la valeur en paramètre va permettre de faire un test sur la page réceptionner pour lancer une nouvelle boucle et récupérer le contenu, un texte par exemple, et je veux faire pareil mais en ajax.

et donc se qui me bloque c'est de passer le lien cliquer en paramètre, mais j'attend ta solution, parceque je sens que je pose mal le problème.

Posté : 04 févr. 2007, 04:21
par Ajoloca
Re,

D'après le message tu as compris.
Je te déconseille d'utiliser prototype pour si peu de choses.
Si tu as l'intention d'aller plus loin dans le sens WEB 2, OK, sinon c'est charger toute une bibliothèque pour une fonction.
De plus tu verras que AJAX c'est juste la manipulation d'un objet JS.

Fais une recherche dans le forum, je crois que Cyrano a fait un superbe tuto sur ce sujet.

Posté : 04 févr. 2007, 04:35
par artotal

Posté : 04 févr. 2007, 13:19
par Ajoloca