Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/04/2011, 11h45   #1
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Par défaut Cibler un id précis

Bonjour/ bonsoir,

j'ai la ligne suivante:
Code :
<tr id="462"><td>NOM</td><td>Prenom</td><td>NOM.Prenom</td><td>ses4fuie</td><td><a href="editCompte.php?app=462"><img border="0" alt="Edition du compte" src="../images/pencil_48.png" /></a></td></tr>
J'aimerai capturer pour un traitement ultérieur l'id de <tr>, mais je n'arrive pas à l'atteindre! j'ai le jquery suivant:
Code :
1
2
3
4
$('td a').click(function(){
quelleLigne = $(this).parent().attr('id');
alert(quelleLigne);
});
Où est-ce que je me trompe ?
merci,
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 11h49   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 806
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 806
Points : 35 803
Points : 35 803
Parce que pour toi, le parent de la balise <a> est la balise <tr> ?

Code :
1
2
3
4
$('td a').click(function(){
quelleLigne = $(this).parent('tr').attr('id');
alert(quelleLigne);
});
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 11h58   #3
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Non, bien sûr, le parent direct étant <td>. C'est pourquoi j'ai écris
Code :
$('td a').click(function(){
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 12h01   #4
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 806
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 806
Points : 35 803
Points : 35 803
Citation:
Envoyé par yann18 Voir le message
Non, bien sûr, le parent direct étant <td>. C'est pourquoi j'ai écris
Code :
$('td a').click(function(){
Euh... oui, donc c'est bien l'événement click de la balise <a> que tu écoutes et dont tu cherches le parent !
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 12h16   #5
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Oui, !
Quand j'écris
Code :
quelleLigne = $(this).parent('tr').attr('id');
Cela me renvoie undefined ! Je vais devenir chèvre !
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 13h00   #6
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
parent est un td ...
le parent du td est un tr

Code :
quelleLigne = $(this).parent().parent().attr('id');

mais plus pragmatiquement
parents
Code :
quelleLigne = $(this).parents('tr').attr('id');
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 14h08   #7
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Et la lumière fut ! Au départ, j'avais cru que parent() rassemblait l'ensemble des éléments, à l'instar de parents(). Je n'avais pas compris qu'il fallait le réutiliser à chaque fois pour remonter d'un niveau... Quant à parents(), j'en ignorais son existence... Ca va mieux maintenant, merci!
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 22h40   #8
Membre actif
 
Avatar de FrankOVD
 
Inscription : juin 2005
Messages : 407
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 407
Points : 182
Points : 182
Envoyer un message via MSN à FrankOVD
Je serait plutôt tenté d'utiliser closest() car on est sûr qu'il ne retournera qu'un résultat. Je me trompe?
__________________
http://www.overdrunk.net

Pensez à la balise
FrankOVD est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 00h38   #9
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant perpétuel
Secteur : Enseignement

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767
Bonsoir

Lorsque l'on recherche un parent précis, je crois que closest("tr") est similaire à parents("tr") et qu'il n'y a pas de différence de performance.

parents() permet également d'obtenir un objet jQuery qui contient tous les parents de l'élément du DOM.

closest() peut également s'utiliser comme ceci :
.closest( selector, [ context ] )
.closest( selectors, [ context ] )

Ce qui permet de restreindre la zone de recherche et donc d'améliorer la performance pour une grande hiérarchie DOM.

Exemple :
Code :
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
70
71
72
73
74
75
76
<!doctype html>
<html lang="fr">
<head>
	<meta charset="utf-8">
	<meta name="Author" content="Daniel Hagnoul">
	<title>Forum jQuery</title>
	<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.11/themes/humanity/jquery-ui.css">	
	<style>
		/* Base */
		body {background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal; font-weight:normal; line-height:normal; letter-spacing:normal; }
		h1,h2,h3,h4,h5 {font-family:serif; }
		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {margin:0px; padding:0px; }
        img {border:none; }
		h1 {font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
		p {padding:6px; }
        ul,ol,dl {list-style:none; padding-left:3px; padding-top:3px; }
        li {padding-bottom:3px; }
		label {display:block; }
		input {width:250px; }
		input[type="button"] {width:auto; }
		input[required] {border-right:3px solid orange; }
		td {padding:3px; }
		.conteneur {width:95%; min-width:800px; min-height:400px; margin:12px auto; background-color:#FFFFFF; color:#000000; border:1px solid #666666; }
 
		/* -- */
 
	</style>
</head>
<body>
	<h1>Forum jQuery</h1>
	<section class="conteneur">
		<table>
			<tbody>
				<tr>
					<td>
						<p>1 : Un mot pour remplir</p>
					</td>
				</tr>
				<tr>
					<td>
						<p>2 : Un mot pour remplir</p>
					</td>
				</tr>
				<tr>
					<td>
						<p id="test">3 : Un mot pour remplir</p>
					</td>
				</tr>
			</tbody>
		</table>
	</section>
	<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
	<script charset="utf-8" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.11/jquery-ui.min.js"></script>
	<script>
		$(function(){
			var obj = $("#test").closest(["tr", "table", "h1"], "section");
 
			console.log("closest", obj, obj.length);
 
			$(obj[1].elem).css("background-color", "lightgreen");
 
 
			// p est l'élément du DOM de niveau 1
			// td est level 2
			// tr est level 3
			// table est level 5
			// parents.eq(0) est td (level 2)
			// pour vérification, on agit sur le level 3 : tr
			$("#test").parents().eq(obj[0].level - 2).css("background-color", "red");
 
			// on agit sur le tag table
			$(obj[1].selector).css("color", "blue");
		});
	</script>
</body>  
</html>
Ce qui retourne, pour mon test et dans Firebug, l'objet closest [Object { selector="tr", elem=tr, level=3}, Object { selector="table", elem=table, level=5}]

Nous avons donc un objet contenant les objets trouvés et pour chaque objet le sélecteur utilisé, l'élément du DOM correspondant et son niveau hiérarchique dans le DOM par rapport à l'élément du DOM utilisé pour la recherche.

Je vous remercie d'avoir attiré mon attention sur closest, il gagne à être connu.
__________________

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h09.


 
 
 
 
Partenaires

Hébergement Web