j'ai une extension de Array, par exemple la fonction :
#index(o) qui retourne l'index de l'objet dans l'Array.
ça marche bien avec des string.
par contre avec des objets du dom ça marche pas.
apparemment l'objet Array interne à JavaScript n'est pas étendu avec ma
fonction #index(o) si je fais :
var dts=new Array();
dts=document.getElementsByTagName("dt");
et que je liste les propriétés de dts je ne retrouve pas #index.
donc je change de "tactique" je fais :
var dts=new Array();
var dts_=document.getElementsByTagName("dt");
for(i in dts_){dts[dts.length]=dts_[i];}
donc là, sur dts j'ai bien la méthode #index MAIS quand je prend un
élément de cette Array par ex dts[i], cet élément n'a plus les
propriétés/méthodes associées à cet élément du dom (comme objet).
Ainsi, si je fais :
var i=0;
dts[i].style.display='none';
js/console me dit :
dts[i].style has no properties
je ne pige pas où est mon erreur de raisonnement...
c'est peut-être aussi bien une typo toute bête...
la page d'essai est là :
<http://www.yvon-thoraval.com/XHTML11/one-menu.xhtml>
l'erreur apparaît dès le chargement de la page, ce qui n'empèche pas
vraiment le script de marcher...
en cliquant sur le premier élément "HOME" du menu de droite on actionne
la fonction expand(this) qui pour l'instant ne fait que lister les
propriétés d dts (où on retoruve bien index).
ouviens-toi de l'astuce : vider le body / remplir le body
oui, mais là c'est juste pour faire un display='block'|'none'... -- Artaban de Médée
unbewusst.sein
Olivier Miakinen <om+ wrote:
Bravo !
merci bien pour cet encouragement )))
j'ai trouvé encore + simple, sans concat ni même sans mémoriser aucune Array
le but :
quand on clique sur un "dt" (ce qui me donne un this) je veux passer le "dd" juste après en display='block' et tous les autre en 'none'.
comme je ne sait pas, en JS, manipuler en dom par XPath, j'ai fait ça :
function expand(o){ var cn=O.parentNode.childNodes; var foundúlse; for(var i=0;i<cn.length;i++){ if(cn[i]===o)found=true; if(cn[i).nodeName==="dd"){ if(found){foundúlse;cn[i].style.display='block';} else cn[i].style.display='none'; } } }
le gros intérêt est que je n'ai pas besoin de gérer des id sur les différents noeuds, enfin j'en ai juste besoin d'un pour initialiser à 'none tous les "dd". -- Artaban de Médée
Olivier Miakinen <om+news@miakinen.net> wrote:
Bravo !
merci bien pour cet encouragement )))
j'ai trouvé encore + simple, sans concat ni même sans mémoriser aucune
Array
le but :
quand on clique sur un "dt" (ce qui me donne un this) je veux passer le
"dd" juste après en display='block' et tous les autre en 'none'.
comme je ne sait pas, en JS, manipuler en dom par XPath, j'ai fait ça :
function expand(o){
var cn=O.parentNode.childNodes;
var foundúlse;
for(var i=0;i<cn.length;i++){
if(cn[i]===o)found=true;
if(cn[i).nodeName==="dd"){
if(found){foundúlse;cn[i].style.display='block';}
else cn[i].style.display='none';
}
}
}
le gros intérêt est que je n'ai pas besoin de gérer des id sur les
différents noeuds, enfin j'en ai juste besoin d'un pour initialiser à
'none tous les "dd".
--
Artaban de Médée
j'ai trouvé encore + simple, sans concat ni même sans mémoriser aucune Array
le but :
quand on clique sur un "dt" (ce qui me donne un this) je veux passer le "dd" juste après en display='block' et tous les autre en 'none'.
comme je ne sait pas, en JS, manipuler en dom par XPath, j'ai fait ça :
function expand(o){ var cn=O.parentNode.childNodes; var foundúlse; for(var i=0;i<cn.length;i++){ if(cn[i]===o)found=true; if(cn[i).nodeName==="dd"){ if(found){foundúlse;cn[i].style.display='block';} else cn[i].style.display='none'; } } }
le gros intérêt est que je n'ai pas besoin de gérer des id sur les différents noeuds, enfin j'en ai juste besoin d'un pour initialiser à 'none tous les "dd". -- Artaban de Médée
Olivier Miakinen
Comprends-tu alors pourquoi dts n'a plus les méthodes en question ? (Comment ça, ce n'est pas la même chose ?)
Non je comprends pas :
var A = [1,2,3]; A[1] = [5,6]; var B = A; alert(B[1][1]); // ---> 6
Dans ton exemple, tu n'écrases pas la variable de départ A, initialement affectée à un Array, par autre chose, Array ou pas.
Ha ? une collection d'éléments n'est pas un tableau (array) ?
Pas forcément. Rien ne t'empêche de définir un objet qui se comporte comme un Array, et qui ait les mêmes méthodes qu'un Array, mais qui ne soit pas dérivé de l'objet Array. Il semble que ce soit le cas pour les tableaux d'éléments du DOM.
Comprends-tu alors pourquoi dts n'a plus les méthodes en question ?
(Comment ça, ce n'est pas la même chose ?)
Non je comprends pas :
var A = [1,2,3];
A[1] = [5,6];
var B = A;
alert(B[1][1]); // ---> 6
Dans ton exemple, tu n'écrases pas la variable de départ A, initialement
affectée à un Array, par autre chose, Array ou pas.
Ha ? une collection d'éléments n'est pas un tableau (array) ?
Pas forcément. Rien ne t'empêche de définir un objet qui se comporte
comme un Array, et qui ait les mêmes méthodes qu'un Array, mais qui
ne soit pas dérivé de l'objet Array. Il semble que ce soit le cas
pour les tableaux d'éléments du DOM.
Comprends-tu alors pourquoi dts n'a plus les méthodes en question ? (Comment ça, ce n'est pas la même chose ?)
Non je comprends pas :
var A = [1,2,3]; A[1] = [5,6]; var B = A; alert(B[1][1]); // ---> 6
Dans ton exemple, tu n'écrases pas la variable de départ A, initialement affectée à un Array, par autre chose, Array ou pas.
Ha ? une collection d'éléments n'est pas un tableau (array) ?
Pas forcément. Rien ne t'empêche de définir un objet qui se comporte comme un Array, et qui ait les mêmes méthodes qu'un Array, mais qui ne soit pas dérivé de l'objet Array. Il semble que ce soit le cas pour les tableaux d'éléments du DOM.
ASM
Olivier Miakinen <om+ wrote:
Bravo !
merci bien pour cet encouragement )))
j'ai trouvé encore + simple, sans concat ni même sans mémoriser aucune Array
le but :
quand on clique sur un "dt" (ce qui me donne un this) je veux passer le "dd" juste après en display='block' et tous les autre en 'none'.
comme je ne sait pas, en JS, manipuler en dom par XPath, j'ai fait ça :
function expand(o){ var cn=O.parentNode.childNodes;
le gros intérêt est que je n'ai pas besoin de gérer des id sur les différents noeuds, enfin j'en ai juste besoin d'un pour initialiser à 'none tous les "dd".
Heu, je suppose ton html de la forme :
dl dt /dt dd /dd /dl
dans chaque DT this.parentNode.getElementsByTagName('DD')[0] attrape tt de suite le DD suivant le DT
et si c'est pour gérer d'un coup tous les dd de la page dds = document.getElementsByTagName('dd');
et si c'est seulement les DD du div d'id = 'truc' dds = document.getElementsById('truc').getElementsByTagName('dd');
le gros intérêt est que je n'ai pas besoin de gérer des id sur les
différents noeuds, enfin j'en ai juste besoin d'un pour initialiser à
'none tous les "dd".
Heu, je suppose ton html de la forme :
dl
dt /dt
dd /dd
/dl
dans chaque DT
this.parentNode.getElementsByTagName('DD')[0]
attrape tt de suite le DD suivant le DT
et si c'est pour gérer d'un coup tous les dd de la page
dds = document.getElementsByTagName('dd');
et si c'est seulement les DD du div d'id = 'truc'
dds = document.getElementsById('truc').getElementsByTagName('dd');
le gros intérêt est que je n'ai pas besoin de gérer des id sur les différents noeuds, enfin j'en ai juste besoin d'un pour initialiser à 'none tous les "dd".
Heu, je suppose ton html de la forme :
dl dt /dt dd /dd /dl
dans chaque DT this.parentNode.getElementsByTagName('DD')[0] attrape tt de suite le DD suivant le DT
et si c'est pour gérer d'un coup tous les dd de la page dds = document.getElementsByTagName('dd');
et si c'est seulement les DD du div d'id = 'truc' dds = document.getElementsById('truc').getElementsByTagName('dd');