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

-
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!
Afficher la suite 

2 réponses

0
Merci
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.
Commenter la réponse de Roubno
Messages postés
8
Date d'inscription
vendredi 8 mars 2019
Statut
Membre
Dernière intervention
11 juillet 2019
0
Merci
Bonjour,
Merci d'avoir répondu au sujet, je vais le tester en ce moment et je vous dirais des nouvelles!
Commenter la réponse de cyberMan_89