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 -
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:
J'espère que vous compreniez mon problème et merci!
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:
- Calcule de la largeur d'un élement sélectionné en javascript
- Comment calculer la moyenne sur excel - Guide
- Telecharger javascript - Télécharger - Langages
- Roland souhaite calculer le montant total des ventes de son magasin. le fichier contient, pour chaque produit, la quantité vendue et le prix unitaire. calculez le montant total des ventes. ✓ - Forum Excel
- Excel champ calculé avec condition - Forum Excel
- Ma souris selectionne tout ✓ - Forum Windows
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.
"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.