Appeler une ancre d'une autre page au coeur d'une fonction Javascript

MissArmande Messages postés 5 Date d'inscription vendredi 19 mars 2010 Statut Membre Dernière intervention 16 avril 2010 - 19 mars 2010 à 18:36
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 16 avril 2010 à 15:02
Bonjour à tous,

Je suis en train de réaliser mon premier site web, et je m'arrache un peu les cheveux.

J'utilise un javascript, trouvé sur le site (http://www.javascriptfr.com/codes/CHARGER-PAGE-PHP-HTML-DANS-DIV_37447.aspx. D'ailleurs, mille mercis à atlante34...)
Cela me permet d'afficher certaines de mes pages php dans une div précise.
MAIS... ce que je voudrait, c'est accéder directement à une ancre nommée, située ces pages php.
Je pensais qu'en utilisant bêtement un lien comme cela:
[# Fichier]

Je suppose que cela vient d'une incompatibilité entre javascript et ancre, et qu'il faut désigner l'ancre d'une autre manière... que je ne connais pas (je débute en html et php, donc le javascript, j'en suis au niveau zéro !)
J'ai vu des solutions (que je n'ai pas compris dans le détail) pour des ancres situées dans la même page, mais je n'en ai vu aucune pour des ancres situées dans d'autres pages.

Pourriez-vous m'aider ?
Merci par avance.

7 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 16
20 mars 2010 à 06:46
Bonjour,
Dans une page c'est le navigateur qui fait le boulot
Dans une DIV, c'est à toi de faire le travail
une méthode consisterait à
- avant envoi de la requête tu récupères l'ancre, son NAME en fait
- une fois le document chargé dans la DIV tu récupères la position de l'ancre dans la DIV
- enfin tu fais scroller la DIV afin de l'ancre apparaisse en haut

;O)
0
MissArmande Messages postés 5 Date d'inscription vendredi 19 mars 2010 Statut Membre Dernière intervention 16 avril 2010
20 mars 2010 à 11:21
Bonjour PetoleTeam,

Je te remercie de ta réponse, mais je ne comprends pas du tout comment faire ce que tu me suggères.
Je ne sais pas ce que signifie "récupérer l'ancre" (je connais son nom et dans quelle page elle est, mais c'est tout)
Je en sais pas ce que c'est que "récupérer la position de l'ancre" (c'est le n° de l'ancre dans la page ????)
Et j'ai effectivement appliqué un scroll à ma div, mais quel est le lien entre le scroll et l'apparition de l'ancre au bon endroit ?

Merci d'avance si tu peux être plus explicite envers la novice que je suis.
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 16
20 mars 2010 à 11:29
- récupérer l'ancre, c'est récupérer son NAME, mais donc cela tu l'as déjà...
- récupérer la position de l'ancre, c'est récupérer sa position par rapport au document en d'autres termes son offsetTop pour scroller d'autant ta DIV et faire apparaître ainsi l'ancre en haut de la fenêtre de la DIV...

;O)
0
MissArmande Messages postés 5 Date d'inscription vendredi 19 mars 2010 Statut Membre Dernière intervention 16 avril 2010
15 avril 2010 à 18:42
Bonsoir,

Après du travail sur d'autres fronts, je me remets à mes soucis de code.
Merci de tes conseils, PetoleTeam. J'ai découvert plein de choses que je ne connaissais pas sur javascript en cherchant ce qu'était offsetTop (je t'avais dit que j'étais novice...)

Voilà où j'en suis: j'ai intégré l'offsetTop de mon ancre et le scrollTo pour y arriver, et ça fonctionne ...presque: en fait, le scroll place mon ancre en haut de ma page, et pas en haut de ma div...
Et j'ai fait toutes les combinaisons possibles, je n'arrive pas à intégrer le offsetTop absolu (incluant les offsetTop des Parents) dans ma fonction).

J'ai la fonction qui récupère l'offsetTop:

function getOffset(obj) {
var offsetTop = obj.offsetTop;
while ((obj = obj.offsetParent )!=null) {
offsetTop += obj.offsetTop;
}
return [offsetTop];
}

et j'ai ma fonction "à moi" (qui, donc, fonctionne presque... à l'offset parent près):

function envoieRequeteC(url,id,ancre)
{
var xhr_object = null;
var position = id;
var hauteur = ancre;
if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();
else
if (window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");

// On ouvre la requete vers la page désirée
xhr_object.open("GET", url, true);
xhr_object.onreadystatechange = function()
{
if ( xhr_object.readyState == 4 )
{
// j'affiche dans la DIV spécifiées le contenu retourné par le fichier
document.getElementById(position).innerHTML = xhr_object.responseText;
document.getElementById(position).scrollTop = document.getElementById(hauteur).offsetTop;
}
}
// dans le cas du get
xhr_object.send(null);

}

Et je n'arrive pas à combiner les deux.
J'ai essayé en définissant la fonction d'offsetTop à part, et en l'appelant dans la seconde fonction.
J'ai essayé de l'intégrer directement dans la seconde fonction, dans tous les sens imaginables...
J'ai essayé des définitions d'autres variables intermédiaires, façon ruse de sioux.
Et je n'y arrive pas...

Est-ce-que quelqu'un saurait me dépatouiller ça, parce que là, je commence à craquer, et je n'ai plus d'idées.
Mille mercis par avance.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 16
15 avril 2010 à 20:33
Bonjour,
je n'arrive pas à intégrer le offsetTop absolu (incluant les offsetTop des Parents)
aucun intérêt, je m'explique
l'offsetTop et Left est donné par rapport au parent, et c'est ce qui visiblement t'intéresses et pas plus.
Pourquoi chercher la position dans le document quand tu ne veux que scroller le DIV parent.
;O)
0
MissArmande Messages postés 5 Date d'inscription vendredi 19 mars 2010 Statut Membre Dernière intervention 16 avril 2010
16 avril 2010 à 12:14
Je veux bien, mais est-ce que tu peux m'expliquer, alors, pourquoi avec le scroll, mon ancre ne s'affiche pas en haut de ma div, mais semble (je dit semble car j'ai mesuré à la règle sur mon écran ;)) s'affiche en haut de ma page.
J'aimerais juste savoir pourquoi ça ne marche pas et comment faire pour que cela marche...

Si tu as une idée, n'hésite pas...
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 16
16 avril 2010 à 15:02
Bonjour,
j'ai repris à tête reposée le post et force est d'admettre que j'ai répondu un peu vite...
Dans ton cas il faut

1/ récupérer la position de l'ancre, Ancre_PosY par exemple, par rapport au document

2/ récupérer la position du conteneur, Div_PosY par exemple, de la page par rapport au document également

3/ Soutraire la Div_PosY à la Ancre_PosY pour connaître de combien il faut scroller la DIV

;O)
0