Calcule de la largeur d'un élement sélectionné en javascript

cyber_man_89 -  
cyberMan_89 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Voilà, mon problème c'est de chercher un algorithme pour calculer la largeur de chaque élément sélectionné en utilisant window.getSelection().
Pour bien comprendre la méthode window.getSelection().getRangeAt(0).getClientRects() retourne des blocs de sélection. Ce que je veux faire c'est si la position top du premier élément est égal au second, j'additionne ses largeurs mais il y a des calcule à faire dans cette condition que j'essaie de résoudre avec vous, et s' ils sont différents, on recommence.
Pour bien comprendre ce que je veux dire, voilà le code que j'utilise:

//tableau contenant une liste de selection
var tab_test=window.getSelection().getRangeAt(0).getClientRects();

var tab_width=[];

var add=0; //contenant les largeurs de l'élément du même position top

var addWidthStart=true; //bool pour additionner les éléments suivant et précédent qui n'ont aucun intérsection

//tab_test ne contient qu'un seul bloc
if(tab_test.length == 1)
           {
               //console.log("iray ihany ny alavany");
               tab_posX.push(parseInt(tab_test[0].left)-15); 
               tab_width.push(parseInt(tab_test[0].width));
           }
//plusieurs bloc
           else
           {
               
            for(var i=0, j=i+1; i<tab_test.length-1 && j<tab_test.length; i++,j++)
             {

//même hauteur
                 if(parseInt(tab_test[i].top) == parseInt(tab_test[j].top) || parseInt(tab_test[i].top)+1 == parseInt(tab_test[j].top) || parseInt(tab_test[i].top) == parseInt(tab_test[j].top)+1 )
                 {
                     
                     
                      
                       //si (x1<X2 &&  x2 < X1+w1 && x2+w2 <= x1+w1)

                     if(parseInt(tab_test[i].left)-15 < parseInt(tab_test[j].left)-15 && (parseInt(tab_test[i].left)-15)+parseInt(tab_test[i].width) >= (parseInt(tab_test[j].left)-15)+parseInt(tab_test[j].width) && parseInt(tab_test[i].width)+(parseInt(tab_test[i].left)-15) > (parseInt(tab_test[j].left)-15))
                     {
                        add+=parseInt(tab_test[i].width);
                     }

//si (x1<X2 &&  x2 < X1+w1 && x2+w2 > x1+w1)

                     else if((parseInt(tab_test[i].left)-15) < (parseInt(tab_test[j].left)-15) && (parseInt(tab_test[i].left)-15)+(parseInt(tab_test[i].width) > parseInt(tab_test[j].left)-15) && (parseInt(tab_test[i].left)-15)+parseInt(tab_test[i].width) < (parseInt(tab_test[j].left)-15)+parseInt(tab_test[j].width))
                     {
                         var addW=Math.abs(((parseInt(tab_test[i].left)-15)+parseInt(tab_test[i].width)) - ((parseInt(tab_test[j].left)-15)+parseInt(tab_test[j].width)));
                         add+=(addW+parseInt(tab_test[i].width));
                     }
// si (x1<x2 && x1+w1 < x2)

                     else if((parseInt(tab_test[i].left)-15) < (parseInt(tab_test[j].left)-15) && (parseInt(tab_test[i].left)-15) + parseInt(tab_test[i].width) < parseInt(tab_test[j].left)-15)
                     {
                         
                         if(addWidthStart)//on additionne la précédente et la suivante (w)
                         {
                             add+=(parseInt(tab_test[i].width)+parseInt(tab_test[j].width));
                             addWidthStart=false;
                         }
                         else//on additionne que le suivant maintenant
                         {
                             add+=parseInt(tab_test[j].width);
                         }

                     }
                          
     
                 }
                 else
                 {
                        addWidthStart=true;
                        
                       //on ajoute dans le tableau de largeur
                         if(add > 0)
                         {
                             tab_width.push(add);
                             
                             add=0;
                             add+=parseInt(tab_test[j].width);
                         }
                         else
                         {
                                 tab_width.push(parseInt(tab_test[i].width));

                         }
                         
                 }
             }

J'espère que vous compreniez mon problème et merci!

2 réponses

Roubno
 
Bonjour,
"Ce que je veux faire c'est si la position top du premier élément est égal au second"
et avec element.clientTop ça serais pas plus simple à faire?
https://www.w3schools.com/jsref/prop_element_clienttop.asp
ou directement element.clientWidth pour ajouter les largeurs.

.getSelection() quand je lis la doc retourne un texte donc pas exploitable il faudrais le container parent du nœud de texte(et non un 'String'), probablement mieux vaux utiliser un événement dans ce cas.
0
cyberMan_89 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,
Merci d'avoir répondu au sujet, je vais le tester en ce moment et je vous dirais des nouvelles!
0