11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour à toutes et tous,

J'ai un tableau dans lequel je place des div dans chacune des cellules. Certaines div sont contenues dans des a de façon à avoir un lien qui fait la taille de la cellule et une couleur appropriée.

Pour une fonction Jquery je me place dans mes div via leur class, je dois ensuite récupérer le cellIndex des td dans lesquelles les div sont placées. Le problème étant que certains div sont directement dans les td et d'autres snot contenu dans des a au sein des td, je ne eput donc pas utiliser .parent(). Je me suis donc tournée vers $(this).closest('td') et la même chose mais avec .parents(), mais sans succès Smiley decu .

Si quelqu'un à une idée :


	$('.reservation,.reservation_weekend,.emprunt,.emprunt_weekend,.retour_ok,.retour_ok_weekend').hover(function() {
	
		var dataId = '[data-id="',
			id = $(this).attr('data-id'),
			firstAttr = '"]:first',
			lastAttr = '"]:last',
			buFirst = $(dataId + id + firstAttr),
			buLast = $(dataId + id + lastAttr),
			buFirstPosition = buFirst.position(),
			buLastPosition = buLast.position(),
			buY = buFirstPosition.top - 14,
			buLastX = buLastPosition.left + 20,
			
			nom = $(this).attr('data-nom'),
			debut = $(this).attr('data-debut'),
			fin = $(this).attr('data-fin');
			
		$('#nom').append(nom);
		$('#debut').append(' '+debut);
		$('#fin').append(fin);
		
		var bulleWidth = $('#resa_infobulle').width(),
			buFirstX = buFirstPosition.left - bulleWidth - 12;
			
		$('#crea_resa_conteneur').css('display','none');
		var position = $(this).closest('td');
		if (position.cellIndex < 28){
			$('#resa_infobulle').css({'top':buY,'left':buLastX,'background':'url("template/images/agenda_crea_resa.png") no-repeat scroll left center transparent','padding-left':'9px','padding-right':'0'}).css('display','block');
		} else {
			$('#resa_infobulle').css({'top':buY,'left':buFirstX,'background':'url("template/images/agenda_crea_resa_droite.png") no-repeat scroll right center transparent','padding-left':'0','padding-right':'9px'}).css('display','block');
		};
	},function() {
		$('#resa_infobulle').css('display','none');
		$('#nom,#debut,#fin').empty();
	});


".reservation,.reservation_weekend,.emprunt,.emprunt_weekend,.retour_ok,.retour_ok_weekend" sont des class appliquées aux div contenues dans les td Smiley smile .

En gros ce code me permet d'afficher une infobulle reprenant les données contenues dans les attributs data des div. La bulle se positionnant a droite de la div sélectionnée, sauf si le cellindex dépasse une certaine valeur ou là elle passe a gauche pour ne pas sortir du cadre. La fonction en elle même marche puisqu'elle fonctionnait avant que je fasse quelques modifs sur le dom.
Modifié par Klesk (08 Oct 2012 - 15:36)
Bon j'ai fais un console.log sur position et sur position.cellIndex :

console.log(position); : Me sort bien mon td
console.log(position.cellIndex); : est Undefined.

Quand je regarde dans la console Firebug, a partir du td trouvé par position, ce dernier n'a pas directement de cellIndex, je suis obligé de cliquer sur td puis sur 0 pour ensuite voir le cellIndex du td. Je suppose que c'est pour ça que le cellIndex est undefined. En revanche je ne comprends pas pkoi j'ai comportement et surtout comment naviguer la dedans :S.
Modifié par Klesk (08 Oct 2012 - 13:21)
Problème résolu en mettant if (position[0].cellIndex < 28){ dans ma fonction.

En revanche j'aimerai bien qu'on m'explique pourquoi je suis obligé de préciser le 0 :S
Modifié par Klesk (08 Oct 2012 - 13:37)
Car position est un tableau Smiley cligne Donc pour obtenir le contenu du premier élément du tableau il faut faire : position[0]
http://api.jquery.com/closest/

a écrit :
.closest( selectors [, context] ) Returns: Array
Description: Gets an array of all the elements and selectors matched against the current element up through the DOM tree.


donc ça te renvois bien un tableau rempli des éléments trouvés [0] étant le premier.
Modifié par MrJO (08 Oct 2012 - 14:35)