Greasemonkey, traiter les données d'un tableau - HTML/CSS - Programmation
Marsh Posté le 10-10-2013 à 19:34:58
Les valeurs se trouvent dans des balises td et non tr déjà.
Après tu as juste à trouver les combien t-ième td t'intéressent.
Petit exemple d'utilisation :
Ici on va ajouter au troisième tableau les valeurs des cellules du 2ème tableau.
Code :
|
Marsh Posté le 10-10-2013 à 23:52:44
C'est un bout de code que t'as sortie d'un truc a toi
Je regarde ça demain a tête repenser mais je pense avoir compris l'idée
Merci
Marsh Posté le 11-10-2013 à 08:33:13
Non j'ai repris en partie tes , le tout c'est de savoir si les cellules qui t'interessent auront une position fixe ou non. Si leur position est fixe tu peux les calculer d'avance, autrement il te faudra les trouver grâce à d'autres nœuds ou des expressions régulières pour vérifier le contenu.
Marsh Posté le 13-10-2013 à 16:43:53
Nickel ca marche.
(172ème tableau, et balise TD )
Mais ca m'a permis de m'entrainer pour la trouver en utilisant la petite loop + un match (j'ai utilisé indexOf)
Maintenant, j'ai mes 4 entetes, et j'ai le champ des colonnes.
Plus qu'à stocker ça et à faire mes traitements dessus.
Du coup, si j'ai x lignes avec un petit total à faire sur une donnée.
Le plus simple et manipulable est de créer un tableau ?
Marsh Posté le 13-10-2013 à 22:37:20
Pas forcément, tu peux faire le traitement en même temps que tu récupères les données. Par contre faut extraire le texte, parce que pour l'instant on a juste utilisé les objets.
Je te laisse regarder un autre exemple qui reprend un peu toutes tes questions (dont le pop-up qu'il suffira d'améliorer pour rajouter une petite croix) :
Code :
|
Marsh Posté le 14-10-2013 à 15:16:24
Merci beaucoup, je regarde ça ASAP.
Autre question du coup qui est dans la continuité.
Est il possible avec les données récupérés, de remplir un formulaire sur une autre page (onglet) qui est ouvert ?
Ce formulaire est un pavé numérique composé de cette façon :
Code :
|
ou de liste déroulante
Code :
|
Marsh Posté le 14-10-2013 à 18:18:31
Avec greasemonkey je ne sais pas, après si tu fais ta propre extension Firefox tu dois pouvoir.
Néanmoins, tu peux toujours ajouter dynamiquement le formulaire à ta page et l'utiliser.
Marsh Posté le 14-10-2013 à 23:18:15
Hum je vois.
Le top serait que j'arrive avec un bouton à faire les sélections sur l'autre onglet.
Bon, last question. (Maintenant que je sais récupére mes données, j'hésite sur la façon derrière pour les "afficher" )
Dans ton premier exemple tu dupliques un tableau.
Là si j'ai un tableau. Y a moyen de supprimer des lignes du tableau ??
Par exemple les lignes avec un temps de moins d'une heure (je traite les données et si c'est le cas, boum je delete toute la ligne ?)
Ou à faire un autre tableau en dessous ou à côté ?? Ca c'est comme ton premier possible.
Ca je pense que c'est possible, faut juste réussir à bien le caler au bon endroit
Ou encore, à part la méthode popup pour l'affichage, y en a d'autres ?
Ah oui aussi, la première balise que je récupère avec mon getElementsByTagName est un lien. Donc j'ai un
<a href=.............> NUMERO </a>
Y a bien une fonction pour récupérer juste le numéro ?
EDIT: Pour la dernière j'ai réussi avec :
Code :
|
Par contre, j'aimerais savoir pourquoi je peux pas partir de la valeur que j'avais récupéré avant, et que je suis obligé de refaire un document.getElementsByTagName('td')[i] et non variable. directement
Marsh Posté le 15-10-2013 à 15:55:40
Pour le pop-up tu as la méthode à l'ancienne qui génère un vrai pop-up : window.open()
Le problème c'est qu'en fonction du navigateur et de ses réglages soit ça ouvre une nouvelle fenêtre soit un nouvel onglet soit un message pour te dire qu'un pop-up a été bloqué. xD
Pour la gestion entre onglets, le javascript inclue dans une page n'a pas la possibilité d'interagir avec d'autres fenêtres/onglets. Maintenant Greasemonkey est une extension qui ajoute du javascript aux pages. Les extensions Firefox sont du javascript mais avec une plus grande portée. Donc en fonction de comment est fait Greasemonkey ça peut être possible comme ça peut ne pas l'être, faudrait regarder de la doc.
Autrement pour tes histoires de tableaux on peut soit créer un nouveau tableau avec uniquement les lignes qui nous intéressent tout en gardant (clonage) ou en supprimant les lignes du tableau d'origine. Tu peux aussi uniquement modifier le tableau d'origine en supprimant les lignes qui ne t'intéressent pas.
Nouveau tableau avec clonage (déjà vu) :
Code :
|
Nouveau tableau sans clonage (déplacement des cellules) :
Code :
|
(vérifier qu'on ne rentre pas dans une boucle infinie ou "distordue" parce qu'on bouge l'élément mais de souvenir ça ne pose pas de problème)
Pour supprimer les lignes inintéressantes tu as 2 choix (désactiver ou réellement supprimer)
Code :
|
ou
Code :
|
ordimans a écrit : Par contre, j'aimerais savoir pourquoi je peux pas partir de la valeur que j'avais récupéré avant, et que je suis obligé de refaire un document.getElementsByTagName('td')[i] et non variable. directement |
Si tu as bien mis le code dans ta boucle alors normalement non ça ne devrait pas poser de problème.
Si c'est en dehors de ta boucle alors ça ne devrait rien te renvoyer car en sortie de boucle ton i a la valeur max atteinte en fin de boucle et du coup ça m'étonnerait qu'il soit à 176.
De plus si tu as créé le nouveau tableau avant l'ancien il y a peut-être une réindexation des tags (mais ça m'étonnerait puisque les autres sont ajoutés dynamiquement et ne sont a priori pas parcourus par la méthode getelementsbytagname).
Marsh Posté le 15-10-2013 à 23:08:18
Merci beaucoup pour toutes ses indications. Je verrais après pour l’interaction du coup. car me lancer dans une extension Firefox c'est pas rien quand même.
Là j'ai bien avancé, et surtout j'ai compris le principe de manipulation du coup ca va tout seul, je m'amuse.
Maintenant je fais le innerHTML que à l'affichage au final.
(Par contre, sans le innerHTML, ca affichait Objet Collection, c'est une collection dans quel sens ? par curiosité )
Code :
|
Ca efface immédiatement la ligne. L'autre m'a effacé par celulle en faite. (sympa aussi, faut juste que je comprenne le principe)
J'ai 4 colonnes, la dernière est le total de temps par rapport à la colonne 1.
Admettons j'ai
Colonne 1 >> Colonne 3 >> Colonne 4
A >> 1h >> 1h
B >> 1h >> 1h
C >> 2h >> 5h
C >> 3h >> 5h (même celulle)
En somme j'aurais qu'une seule cellule pour tout les lignes ayant C dans la colonne 1. Compris ?
Du coup là pour mon traitement, que j'avais fait par lot de 4, ca me décale tout.
Ma seule idée que j'ai en écrivant le message, c'est de recalibrer la position de la ligne en vérifiant la donnée...
Ou alors, y a moyen de compter le nombre de cellule pour la ligne peut être ?
Ou alors la différence c'est qu'il y a 4 td pour la première et après 3. (on peut compter le nombre de td rapidement je présume)
PS: mon petit bout de code te parlera plus peut être :
y a que le // ou /* */ ??
Je fais pas la différence entre mes commentaires, et le code commenté [#9BFF00][/#9BFF00]
Code :
|
Marsh Posté le 16-10-2013 à 13:42:23
Une extension Firefox n'est pas forcément très difficile à mettre en place, bon je ne m'en rappelle plus maintenant mais c'est l'histoire de 2 ou trois fichiers.
Pour la suppression, la méthode css désactive uniquement l'élément alors que la méthode javascript le supprime complètement, donc si tu fais ça sur une cellule ça va peut-être déconner car tu n'auras plus le bon nombre de cellules par ligne (à vérifier).
Pour ton problème de colonnes il me manque des détails, est-ce que tu as toujours ABCC? Ou ça peut être AABC? ABCD? ABC?
Tu peux aussi décider de travailler par ligne au lieu de travailler directement sur les cellules. Après je ne comprends pas ton histoire de 3 cellules ou 4 cellules, avec le code s'il n'y a rien de compromettant ça me parlerait surement plus.
Dans ton bout de code, tu peux virer l'histoire de "start" à moins que tu en ais une utilité, c'était juste pour te montrer un exemple pas à pas.
La première boucle for n'a pas lieu d'être je pense, une boucle while serait plus appropriée. La deuxième boucle tu l'arrêtes à 10 lignes pour quelle raison? Fin de tableau?
Et en ce qui concerne le traitement sur les heures je pense qu'on peut faire un Regex qui te sorte ça plus facilement. Déjà "tempsHeure= parseInt(temps);" devrait te sortir ton temps en heure avec un peu de chance et ton temps en minutes doit pouvoir être chopé directement avec un Regex.
Marsh Posté le 16-10-2013 à 19:35:39
Du coup j'ai fait quelques tests.
Code :
|
fonctionne
Code :
|
Dans cette expression régulière, les '/' délimitent le motif, les parenthèses entourent l'élément qui doit être capturé, '\d' signifie qu'on cherche un chiffre (équivaut à [0-9]), le '+' signifie que le '\d' (donc un chiffre) peut être répété plusieurs fois, le 'g' est en dehors du motif, c'est ce qu'on appelle un flag, il signifie qu'on va capturer toutes les occurences répondant aux critères de recherche et non uniquement la première. Il existe un second flag, le 'i' qui lui signifie qu'on ne tient pas compte de la casse, les deux flags peuvent être combinés.
PS : c'est if (tempsMinute > 29) ou if (tempsMinute >= 30) que tu veux faire je pense.
Marsh Posté le 16-10-2013 à 21:28:47
Salut
Ah en gros le
Code :
|
Va caster le nombre. C'est sympathique. (je me suis pris la tête pour rien en effet mais ca marchait )
Merci pour le regex. Après niveau perf, je sais pas du tout ce qui est le mieux mais bon.
JE vais utiliser ton code.
Pour le 30 minutes c'est un détail, je verais si je mets strictement ou supérieur ou égal.
Pour l'histoire de tableau, avec l'exemple c'est plus simple en effet.
En faite je peux ne pas avoir le 4ème <td> :
Code :
|
Sur le second AAAAAAAAAAAAAA, comme c'est la même entité que le premier, le total d'heure a déjà été calculé.
Pigé ?
Citation : La première boucle for n'a pas lieu d'être je pense, une boucle while serait plus appropriée. La deuxième boucle tu l'arrêtes à 10 lignes pour quelle raison? Fin de tableau? |
Je note le while, tellement l'habitude du for
POur la seconde boucle, c'est juste pour les tests, je limite afin que ce soit pas trop long sinon, le test dure trop longtemps. Le début me suffit à voir si ca part bien.
Citation : Pour la suppression, la méthode css désactive uniquement l'élément alors que la méthode javascript le supprime complètement, donc si tu fais ça sur une cellule ça va peut-être déconner car tu n'auras plus le bon nombre de cellules par ligne (à vérifier). |
D'accord pour ça qu'on voyait une légère bande de quelques pixels.
Donc la méthode javascript est mieux, faut juste que je la maitrise
Marsh Posté le 16-10-2013 à 22:19:39
Avec le
Code :
|
Il y a bien une réindexation des tags.
Ca m'en saute un en faite.
(donc faut que quand je supprime un element, je fasse un -1 sur le compteur)
Ca devient intéressant
Marsh Posté le 16-10-2013 à 22:47:25
Oui du coup ça devient intéressant car on peut retravailler ton tableau d'origine avant de faire le traitement.
Pour la suite, je pense que soit on va travailler par ligne soit on modifie ton tableau d'origine pour qu'il n'y ait que 3 cellules (voire 2 puisque la première est vide et non fermée) à chaque ligne.
Toi ce que tu veux à chaque fois c'est juste le AAAAAAAAA et le temps?
Je voulais regarder l'incidence d'une cellule sur 2 lignes au niveau de son élément parent mais j'ai un problème pour chopper la cellule depuis la ligne, je ne sais pas pourquoi, je suis claqué ce soir donc je regarderai ça demain.
Marsh Posté le 16-10-2013 à 23:01:34
J'viens de faire une bidouille, et ca me semble pas trop mal marcher.
En gros je suis parti à la recherche du début du tableau.
ensuite je traite ligne par ligne et non cellule par cellule ce qui me paraissait plus sympa en faite. (je sais plus pourquoi)
Ah si vu que au final, sur une ligne, j'ai toujours le même ordre pour mes données, avec cette dernière cellule qui y est ou pas;
Donc j'ai fait pour une cellule, la récupération de mes données nécessaires (la dernière colonne, jmef en effet, enfin pour l'instant)
Je peux la ré-obtenir de toute façon.
Et donc j'ai fait ça , juste le passage intéressant, le reste à pas trop bouger.
(ah si j'ai fait un while du coup)
PS: Il y a des trucs je sais pas si c'est la bonne méthode, l'init de groupePrecedent, ou les variables init comme le i.
C'est pas nécessaire des fois je crois.
L'habitude du langage actuel où je déclare tout sans besoin d'initialiser.
Code :
|
Marsh Posté le 17-10-2013 à 11:58:10
Oui ça va fonctionner comme ça, suffit de faire une petite simulation à la main rapidement pour s'en apercevoir.
Pour faire simple on va prendre ce tableau :
Code :
|
debutTableau = 1
Première boucle for :
i=4
numero=n°1
groupe=A
temps=temps1
TEST -> true : groupePrecedent=A
Deuxième boucle :
i=8
numero=n°2
groupe=B
temps=temps2
TEST -> true : groupePrecedent=B
Troisième boucle :
i=12
numero=n°4
groupe=C
temps=temps3
TEST -> false : i=11
Quatrième boucle :
i=15
numero=n°3
groupe=C
temps=temps4
TEST -> true : groupePrecedent=C
Bref c'est très bien, rien à redire, si ce n'est que le textContent est un peu plus propre que le innerHTML.
Oui il faut bien initier tes variables.
Par contre au niveau de la boucle While tu t'es un petit peu compliqué les choses, ceci serait plus propre :
Code :
|
L'autre solution pour éviter de travailler sur le nombre de cellules c'est de travailler sur les lignes <tr> et de ne prendre à chaque fois que les 3 premiers éléments.
Tu détectes ton début :
Code :
|
Après dans ta boucle for tu te déplaces uniquement en i++ et tu choppes :
Code :
|
Le childNodes me posait problème hier mais en fin de compte tu peux le remplacer par un getElementsByTagName('td') et ça devrait passer.
Marsh Posté le 17-10-2013 à 15:47:08
Code :
|
Ceci fonctionne bien, reste à percer le mystère de cette ligne :
Code :
|
Si je mets :
Code :
|
Je devrai obtenir le même résultat alors qu'en fait ça ne fonctionne pas.
Code :
|
Renvoie un objet texte.
Conclusion : le childNodes me renvoyait en fait mon indentation se trouvant entre le <tr> et le <td> :
Code :
|
Du coup ben c'est galère à utiliser mais ce code-ci fonctionne aussi :
Code :
|
Marsh Posté le 17-10-2013 à 23:24:32
Super merci pour les infos, je regarde tranquillement tout ca demain.
Le childnode a l'air sympa. C'est vrai pourquoi ne pas se baser sur la balise du dessus
Pour le while, je suis vraiment pas habitué à les utiliser. Déjà que je l'ai récris deux fois
-Sinon, question avec ça on peut du coup ne pas afficher des élements d'une page, et y a moyen de bloquer les éléments avant leur chargement histoire d'optimiser le temps entre guillemets ?
-Autre chose, j'ai une page avec différents onglets dessus et quand je clique sur un onglet ca recharge toute la page (dont l'entete qui ne change pas, et change au final que l'onglet)
Y a moyen, de lui faire charger tout les onglets, et ensuite de pouvoir modifier pour que les onglets soient interactifs sans recharger la page du coup.
C'est à dire que ca permettrai de gagner du temps, mais je sais pas si avec du simple javascript externe c'est possible. (faudrait recoder la page) et surtout en Javascript je sais pas si c'est possible. Faut utiliser de l'ajax non ?
-Dernier truc, pour l'interaction entre deux onglets, à priori je suis tombé sur un truc hier.
Si tu fais un window.open(blabla)
et derrière tu fais référence avec un opener tu peux récupérer les éléments à priori.
Je retrouve plus le lien qui expliquait, mais ici c'est un exemple à priori :
http://www.rgagnon.com/jsdetails/js-0066.html
Donc ca serait possible. En gros, on ouvrirait une autre fenêtre et donc onglet et on pourrait transférer les valeurs qu'on a constitué sur la première page.
-Il me reste à regarder comment rajouter des boutons quand même pour enclencher les actions ou pas.
Afin d'activer ou pas les fonctions, car actuellement ca fait tout tout seul....
Marsh Posté le 18-10-2013 à 09:19:56
La boucle for s'utilise uniquement quand tu connais ton nombre d'itérations à réaliser. La boucle while pour tout le reste, enfin en concurrence avec les fonctions récursives (des fonctions qui s'appellent elles-mêmes).
Code :
|
n'est ni plus ni moins :
Code :
|
La fin de la boucle for se détecte sur le nombre d'itérations à réaliser alors que la boucle while accepte n'importe quelle condition de fin.
- Non on ne peut pas gagner de temps de chargement car le javascript est réalisé en post-traitement dans le mesure où tu ne peux pas manipuler un élément avant qu'il soit créé. Par contre tu peux faire l'inverse, ne rien mettre dans ta page puis la construire par javascript (ou du moins les éléments lourds). Mais à moins d'avoir des choses très lourdes à afficher ou non le javascript ne te fera pas gagner de temps car de toute façon tes éléments créés sont ensuite interprétés par le moteur HTML.
- Je n'ai pas compris ton histoire d'onglets, l'ajax te permet d'envoyer une requête à un serveur et récupérer le retour sans avoir recharger la page.
- Je vais faire quelques tests sur le .opener() mais il semblerait que ce soit : tu ouvres depuis ta fenêtre A un pop-up B (onglet/fenêtre) et que depuis ce pop-up B tu puisses interagir avec la fenêtre A. Mais ça ne marcherait que de B vers A l'interaction.
- createElement('button'), appendChild(element) et setAttribute('attribut', 'valeur') sont tes amis, je les avais utilisé dans les premiers codes.
EDIT : testé, en effet de B vers A ça fonctionne et de A vers B tu ne sembles pas pouvoir.
Marsh Posté le 18-10-2013 à 10:22:25
-C'est ça, le but serait de récupérer tout les onglets d'une page (qui à chaque fois tu cliques recharge intégralement la page, et les convertir en ajax afin de ne pas recharger la page)
-Il faut définir le mot intéraction. Est ce que sur la fenêtre B on peut récupérer les valeurs de la fenêtre A ?
Si je comprends, tu dis qu'on peut seulement de la fenêtre A mère récupéré ce qu'on a fait dans la fenêtre B. (c'est pas trop un problème suffit d'ouvrir dans l'ordre autre les fenêtres )
Marsh Posté le 18-10-2013 à 11:29:26
Depuis B on peut manipuler les objets de A mais depuis A on n'a pas accès aux objets de B. Du coup si tu écris quelque chose dans A on doit pouvoir le récupérer depuis B par cette méthode. Au pire on peut toujours passer des valeurs dans la barre d'adresse.
Marsh Posté le 18-10-2013 à 12:05:58
Ok donc ca ira. Le seul truc que je souhaite faire c'est passer les valeurs.
Et j'ai vu y a la méthode cookie aussi.
Marsh Posté le 27-10-2013 à 20:04:19
YOp
Bon j'ai repris avec un peu de retard, dur dur de s'y replonger dedans.
Merci beaucoup pour le dernier bout de code, j'ai adopté cette solution en traitant par ligne, donc par TR c'est juste 100x plus simple, pas besoin de se faire chier.
J'ai juste eu un petit soucis (par rapport à la première fonctionnalité) qui est de supprimer la ligne si heure et minute = 0
Et il fallait prévoir le cas où le premier temps est 0, ce qui supprimait et bien le temps Total, tu l'auras deviné. Du coup je l'ai stocké, et réinsérer la ligne d'après.
ET j'ai en plus redimensionné la case Temps Total quand une ligne était supprimé. Suffisait de faire un -1 au rowSpan, bref c'est tout simple. (j'étais même surpris que le blabla.rowSpan-=1; fonctionne)
Bref, là du coup c'était juste pour l'échauffement car c'est pas une fonction bien importante mais ca m'a permis de manipuler les cellules donc un bon entrainement.
Je sais où sont mes valeurs maintenant.
Là maintenant je veux rajouter un button, c'est fait, et quand je clique je dis d'appeler une fonction mais ca marche à moitié... (j'ai réussi une fois mais c'était en mettant le code alert direct.
Donc j'ai ma fonction déclaré après mes valeurs :
Code :
|
Puis
Code :
|
L'ouverture de la page google ca marche à chaque fois.
Mais l'autre j'y arrive pas ca appelle pas la fonction. Y a une nuance avec les double et simples quotes ? C'est ce que j'ai vu dans des scripts.
Si je mets
Code :
|
ca fonctionne
Marsh Posté le 27-10-2013 à 21:11:44
J'ai trouvé de cette façon :
Code :
|
Là je suis en train de créer un form en javascript du coup.
Je pense ne pas avoir le choix pour passer 3 valeurs ?
J'explique, j'ai un bouton par ligne maintenant. Sauf que j'ai généré dynamiquement les boutons, et je n'ai pas les infos de la ligne sur ceux ci.
Donc y a t'il moyen de garder l'id de la ligne sur le boutton, et quand je clique dessus, j'appelle la fonction (ça c'est OK) et je récupère les éléments dans ma fonction, vu que j'ai l'ID.
Ou bien je suis obligé de passé par un form généré avec les différents champs et j'ouvre ma nouvelle page direct ?
Deux solutions... je suis parti sur la seconde...
Code :
|
Marsh Posté le 27-10-2013 à 21:57:54
J'ai trouvé un truc, bah j'y aurais jamais pensé. C'est une bidouille du Javascript je présume ??
Si y a moyen de faire autrement je prends en tout cas.
Ca marche nickel en tout cas, j'ai l'ID et je vais pouvoir tout récupérer
J'ai trouvé ça ici :
http://w3blog.fr/2010/11/19/eviter [...] avascript/
Code :
|
EDIT:
Rectification je suis allé trop vite.
Donc on passe le paramètre qu'on souhaite tout à la fin, et dans les autres le nom de la variable.
Ouais c'est un peu bizarre à comprendre.... a coup de return....
Code :
|
Marsh Posté le 27-10-2013 à 22:20:19
Pas compris ton dernier truc, le lien que tu me donnes est une technique pour passer un paramètre dans une fonction sans exécuter la fonction si j'ai bien suivi (lu rapidement en diagonal). Déjà pour ça il y a les variables globales que l'on utilise depuis le début.
Enfin bref, pour garder le numéro de ligne il suffit de le passer dans l'id : id="button8" puis tu parse le numéro. Tu peux aussi utiliser l'objet "this" qui désigne l'objet appelant :
Code :
|
Code :
|
Je n'ai pas tout suivi, mais tu peux passer plusieurs valeurs dans une seule en parsant :
Code :
|
Après, un coup de Regex et tu récupères plusieurs variables avec leurs valeurs associées.
Marsh Posté le 27-10-2013 à 22:29:35
C'est ça.
En faite quand je mettais ma fonction sur le onclick, il l'appelait.
ET si je mettais mon paramètre bah ca marchait mais il l'appelait direct à l'exécution et non au click.
Du coup, là je passe tout en GET, c'est plus simple me semble t'il. Et j'utilise cette fonction trouvé :
Je testerais quand même si ca marche avec la technique du opener.
Mais là du coup j'arrive sur ma nouvelle page et j'ai mes valeurs donc c'est plutôt cool.
Me reste plus qu'à réussir à parser cette nouvelle page afin de sélectionner les valeurs récupérés dans des longues listes
Code :
|
J'ai découvert le this justement, on gagne du temps
Enfin ca fait référence à l'objet en cours de manipulation c'est ça ?
Du coup, plus besoin du forms que j'avais créé mais je me pose quand même une question.
Pourquoi ça ca ne marchait pas :
Je construit le forms, et je rajoute deux boutons dedans mais quand je mets le forms dans la balise TD, il affiche pas.
C'est juste par curiosité
Code :
|
Marsh Posté le 28-10-2013 à 11:40:21
Code :
|
Ce ne sont pas des attributs de la balise form, il te faut créer à l'intérieur de ce form des inputs avec pour attributs ('name',numero) et ('value',numero).
Par contre je n'ai toujours pas compris ton problème avec le onClick, cet évènement déclenchera l'appelle de la fonction et de son argument au moment du clic, si tu charges la page avec une valeur pour ton paramètre, qu'elle change ensuite puis que tu cliques pour appeler ta fonction et bien tu auras la dernière valeur passée en paramètre.
Marsh Posté le 29-10-2013 à 19:58:51
En faite au début j'avais mis
onclick = envoieData();
Du coup ca l’exécutait au chargement....
je connaissais pas la "bidouille" comme ça.
Bon sinon maintenant que j'ai mes données, que je suis sur l'autre site avec mes valeurs dans l'URL (simple et concis)
(On m'a parlé de localstorage aussi pour passer les valeurs de l'un à l'autre mais bon.... pourquoi faire compliqué)
Bref, j'ai trouvé ma balise TD contenant mon menu déroulant.
Et là j'ai ça :
(bon j'ai un menu caché je sais pas pourquoi)
Donc là ca va être marrant. faut que j'arrive à sélectionner la bonne valeur à chaque fois.
Code :
|
Marsh Posté le 29-10-2013 à 22:52:53
Normalement non, avec l'évènement onClick, la fonction est éxécutée qu'au moment du clique et non au chargement (d'où onClick, autrement ça serait un onLoad). Tu devais appeler ta fonction ailleurs, non?
Marsh Posté le 29-10-2013 à 23:58:30
Quand tu disais le textContent est plus propre que le innerHTML, tu entendais quoi ?
Là par exemple, j'ai un innerHTML qui me ramène :
<font>Heure</font>
alors que le .textContent me ramène :
Heure tout court.
Change tout pour un while
Soit
Code :
|
ou
Code :
|
Les deux m'affiche Heure avec un alert.
Mais le second ne marche pas dans un while... il ne trouve jamais.
Marsh Posté le 30-10-2013 à 13:01:51
Hum, question non technique.
J'ai une liste, qui peut contenir deux lignes avec le même contenu "CM". Donc j'ai mon petit while qui va me ramener la ligne, mais la première.
J'aimerais que dans le cas où il y a deux lignes avec CM, on affiche un petit popup ou autre.
Une idée ?
Une imbrication ou on continue de parcourir même si on a trouvé ?
Marsh Posté le 30-10-2013 à 13:36:22
Perso j'imbriquerai un if avec une vérif au rang i+1 (vérifier que ligne[i+1] existe) ou au rang i-1 (commencer à partir de i=1).
Après ben tu continues de parcourir si tu veux faire autre chose, autrement tu utilises une variable initialisée à true puis tu la passes à faux quand ta ligne est trouvée.
Code :
|
Je n'ai pas eu le temps de lire le reste.
Marsh Posté le 31-10-2013 à 11:17:18
Petit soucis sur la partie pavé numérique qui est en jquery à priori.
j'ai bien sélectionné les chiffres, et simulé un click dessus.
Mais quand je valide la page (le formulaire) par un boutonValidation.click();
Bah ca me dit des erreurs ont été détectés, sur le pavé, à priori il manque un truc.
si je clique à nouveau sur un chiffre, ca passe.
Une idée ?
Je s ais pas si y a moyen de "débugger" pour voir qu'elle est la vérif effectué lors de la soumission.
Marsh Posté le 31-10-2013 à 16:03:26
Bon dernièrement je n'ai pas trop suivi mais aux dernières nouvelles il n'y avait pas d'histoire de pavé numérique.
Qu'est-ce donc que cette histoire?
Non parce que j'essaye de situer un pavé numérique dans le contexte et je ne vois pas du tout à quoi ça peut bien te servir. Enfin bref un bout de code? Difficile de te dire d'où vient l'erreur sans le type d'erreur et sans le code.
Marsh Posté le 31-10-2013 à 21:04:53
Désolé, je suis allé vite en besogne
C'est un pavé numérique ou tu appuies sur le chiffre, c'est à quoi ca ressemble.
Mais sinon ca donne ça
Code :
|
Donc j'ai récupéré mon objet avec la class, parfait d'ailleurs.
Bien que j'ai un doute du coup sur l'utilité des loop vu qu'il y a qu'un objet ayant cette class, j'ai pas besoin de faire de while pour tout parcourir tu confirmes ?
Donc en gros tu vois, on a les chiffres de 0 à 7.
Quand je clique dessus en temps normal, réellement ca fait un
Code :
|
Donc j'ai fait
choixHeure.setAttribute('class','selectedValue');
Ca marche bien, sauf qu'après quand je valide la page, bah il me dit des erreurs ont été détectés. Il doit faire une vérif mais laquelle.
ET je dois vraiment cliquer sur le chiffre.
Marsh Posté le 01-11-2013 à 14:03:54
Si tu ne récupères pas la valeur en jquery (ce qui n'est pas vraiment utile) alors non tu n'as pas besoin de boucle, juste prendre l'élément de l'index 0.
Autrement setAttribute est plus pour créer une attribut quand il n'existe pas encore, mais bon ça modifie aussi valeur de l'attribut s'il existe déjà. Tu pourrais tout aussi bien faire :
Code :
|
Enfin bref le problème n'est pas là, juste comme ça, tu as pensé à retirer l'ancienne selectedValue si tu en choisis une nouvelle? Parce qu'autrement tu te retrouves avec 2 cellules ayant pour class "selectedValue".
Après pourquoi tu dois vraiment cliquer sur le chiffre, ben ça dépend comment ça a été codé, c'est bizarre mais ça voudrait dire qu'il déclenche l'évènement sur le contenu de la cellule et non sur le cellule même.
Tu as quoi comme message d'erreur dans la console web?
Marsh Posté le 01-10-2013 à 22:01:13
Salut
J'attaque un peu de dev sur Greasemonkey là. J'ai lu quelques docs pour comprendre, rien de bien sorcier.
Par contre là je sèche un peu, j'attaque pas par le plus simple peut être.
C'est pour récupérer les données (le plus dur )
Je voudrais récuperer les données d'un tableau (y a des tableaux en veux tu en voilà sur la page....)
En gros ca donne :
Ce qui est en gras est présent x fois. J'vois pas bien comment récupérer l'ensemble des 4 valeurs.
avec un getElementsByTagName("tr" ); ????
Le problème c'est que y en a partout des balises tr... donc faut que je traite le bon.
Merci par avance.
Une fois que j'aurai compris comment faire pour un ca devrait aller.
But : Une fois récupérer toutes les groupes de valeurs, bah j'aimerais afficher un petit popup ou autre, avec le récap.