11550 sujets

JavaScript, DOM et API Web HTML5

Hello,

Est ce que qq1 aurait une idee pour recuperer la partie du texte qui depasse d'un bloc.

je m'explique. J'ai un bloc de taille X par Y et quand je met du texte plus long que mon bloc, il est bien caché, ca, c'est bon. mais j'aimerai recuperer ce texte pour faire un traitement dessus. Est ce que qq1 a une idee de comment je peux faire ca ?

MErci d'avance

Chag
À ma connaissance ce n'est pas possible.

Tu peux arriver à des approximations en plaçant le texte dans un élément de type bloc (DIV notamment) dont tu pourras mesurer la hauteur finale; ensuite tu compares cette hauteur à celle du conteneur, et tu récupères la partie du texte qui correspond au ratio. Mais ça ne sera pas précis...
ajoute lettre par lettre le contenu jusqu'a ce que le scrollHeight depasse le offsetHeight ...
Tout ce qui est après est caché ...
ho bien vu ca! !
Je peux peut etre meme optimiser en ajoutant mots par mots!
merci pour l'idee en tout cas!
Intéressant comme solution. Un peu lourd pour les performances si c'est un mécanisme utilisé partout dans le site, peut-être.
lourd certainement, mais c'est le seul moyen si l'on n'utilise pas une police à espacement constant.
Il y a sans doute ensuite des possibilités d'optimisation au niveau de l'ajout par groupe de mots pour cerner le point de bascule.
Je me demandais comme ça, on peut mettre un curseur sur une lettre et le bouger ?
Comme ça on compare ça position avec le cadre pour savoir s'il est dedans ou pas.
je ne vois pas trop comment recupérer la position du curseur ??

jo suivi sans e ...
Modifié par SpaceFrog (20 Jan 2010 - 16:19)
Yop,

Bon, ca y est, j'ai eu le temps de mettre en place cette solution. Voila mon code pour ceux que ca peut intéresser. Merci pour l'idée en tout cas ! Smiley smile

L'idée est de découper le texte présent dans le premier textarea en mots (split sur l'espace) puis d'ajouter chaque mot (chaque élément du tableau quoi) au 2eme textearea. Quand scrollHeight devient supérieur a offsetHeight, on revient au mot précèdent et on coupe le texte a cet endroit.


			var j = -1;
			var k = 0;
			var txtarea_new = new Array();

			function process() {
		  	  document.forms["formobj"].txtarea2.value = "";
			  texte = document.forms["formobj"].txtarea.value;
			  texte_array=texte.split(" ");
//			  alert ("nb de mots : "+texte_array.length);
//			  alert ("dernier mot : "+texte_array[texte_array.length - 1 ]);
//			  alert ("offsetHeight = "+document.forms["formobj"].txtarea.offsetHeight);
//			  alert ("scrollHeight = "+document.forms["formobj"].txtarea.scrollHeight);
			  for (i = 0; i<texte_array.length; i++) {
				txtareatmp = document.forms["formobj"].txtarea2.value;
			  	document.forms["formobj"].txtarea2.value = document.forms["formobj"].txtarea2.value + " " + texte_array[i];
				if (document.forms["formobj"].txtarea2.scrollHeight > document.forms["formobj"].txtarea2.offsetHeight ) {
				  j++;
				  txtarea_new[j] = txtareatmp;
			  	  document.forms["formobj"].txtarea2.value = "";
				  i--;			
				}
			  }
			  j++;
			  txtarea_new[j] = txtareatmp;
			  alert ("process finished. pages : "+(j + 1));
  			  document.forms["formobj"].txtarea2.value = txtarea_new[0];
			}
[/i]