Calcule de la largeur d'un élement sélectionné en javascript
cyber_man_89
-
cyberMan_89 Messages postés 9 Statut Membre -
cyberMan_89 Messages postés 9 Statut Membre -
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
- Open element - Télécharger - HTML
- Telecharger javascript - Télécharger - Langages
- Ma souris sélectionne plusieurs éléments lors d'un clic simple ✓ - Forum Windows
- Impossible de copier car cet élément est trop volumineux pour le format du volume - Forum MacOS
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.