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

Fermé
cyber_man_89 - Modifié le 25 mars 2019 à 11:23
cyberMan_89 Messages postés 8 Date d'inscription vendredi 8 mars 2019 Statut Membre Dernière intervention 11 juillet 2019 - 28 mars 2019 à 06:59
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!
A voir également:

2 réponses

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 vendredi 8 mars 2019 Statut Membre Dernière intervention 11 juillet 2019
28 mars 2019 à 06:59
Bonjour,
Merci d'avoir répondu au sujet, je vais le tester en ce moment et je vous dirais des nouvelles!
0