JS : Reference à une propriété d'un element

JS : Reference à une propriété d'un element - HTML/CSS - Programmation

Marsh Posté le 19-07-2006 à 23:37:19    

:hello: all !
 
Je me posais une question mais vraiment conne :/
 
Nous somme tous d'accord qu'en JS on peut faire une référence à un élément ex :

Code :
  1. <div id="toto" style="font-size:20px; width:40px">
  2. var titi = document.getElementById("toto" );


 
Dans mon cas maintenant j'ai titi qui est une reference au div avec l'id toto
et je peux alors accéder à toute les propriétés et méthode de cet élément.
 
ce que je me demandais, c'est si on peut faire une reference à une propriété sur un élément [:petrus75]
ex:  
 
var reftiticlass = titi.className;
 
je voudrais que reftiticlass soit une reference à titi.className, dans ce cas quand je modifie reftiticlass, ca impute les changements sur titi.className.
 
Mais je ne vois pas comment faire, ou peut être est-ce impossible à faire, il y a de fortes chances :/
Mais ça serait top si on pouvais passer les variables par reference comme des pointeurs en C ou byref en vb
 
Ceci est juste une question a la con qui tournait dans ma tête ce soir[:petrus75]


Message édité par gatsu35 le 20-07-2006 à 08:40:21
Reply

Marsh Posté le 19-07-2006 à 23:37:19   

Reply

Marsh Posté le 20-07-2006 à 10:31:49    

http://www.snook.ca/archives/000503.php
 
ça a l'air d'être le cas pour les objets non, ou alors c'est encore une weberie à la con à laquelle je comprends rien [:petrus dei]
 

Citation :


Passing in an object, however, passes it in by reference. In this case, any property of that object is accessible within the function.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-07-2006 à 11:42:37    

Harkonnen a écrit :

http://www.snook.ca/archives/000503.php
 
ça a l'air d'être le cas pour les objets non, ou alors c'est encore une weberie à la con à laquelle je comprends rien [:petrus dei]
 

Citation :


Passing in an object, however, passes it in by reference. In this case, any property of that object is accessible within the function.



C'est ce que j'ai expliqué au début, j'entend par élément, objet [:moule_bite]

Reply

Marsh Posté le 20-07-2006 à 11:55:20    

ben alors, les objets sont bien passés par référence, skoi le pb ? [:el g]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-07-2006 à 12:18:48    

ce sont pas les objet que je veux passer en reference mais les attribut de ces objet
 
var foo = obj.className
 
foo devient une string et non une reference à className
et je voudrais que foo devienne une reference à className
 
enfin je dis je voudrait, mais j'en ai pas forcément besoin [:petrus75]

Reply

Marsh Posté le 20-07-2006 à 12:26:25    

ben utilise un vrai langage [:jagstang]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-07-2006 à 13:47:11    

quand Harkonnen parle d'objet, il parle d'objet que tu aurais créer pas de ceux que tu peux "récupérer" comme par exemple un DOMnode. C'est la seule façon de faire des passages par référence.
Du coup tu peux te créer un objet propRef pour jouer avec!
Un truc dans le genre:

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  4. <head>
  5.   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  6.   <title>Exemple</title>
  7.   <script type="text/javascript">
  8. window.onload = function (e){
  9.   function propRef(e, p){
  10.     this.element = e;
  11.     this.prop = p;
  12.   }
  13.   propRef.prototype.setValue = function (value){
  14.     this.element.setAttribute(this.prop, value);
  15.   }
  16.   propRef.prototype.toString = function(){
  17.     return this.element.getAttribute(this.prop);
  18.   }
  19.   var pr = new propRef(document.getElementById('p'), 'class');
  20.   pr.setValue('piut');
  21.   alert('pr:'+pr+' -- element: '+document.getElementById('p').getAttribute('class'));
  22. }
  23.   </script>
  24. </head>
  25. <body>
  26. <p id="p" class="pouet">paragraphe</p>
  27. </body>
  28. </html>

Reply

Marsh Posté le 20-07-2006 à 16:00:42    

elle te plait pas ma solution ??? :o

Reply

Marsh Posté le 20-07-2006 à 17:28:26    

Heu elle est bien, mais moi j'aurai préféré avoir un operateur :( malheureusement ca n'existe pas :/
 
tiens sinon, c'est pas plus simple ??  
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3.     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  4.     <head>
  5.      <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  6.      <title>Exemple</title>
  7.      <script type="text/javascript">
  8.     function propRef(e, p){
  9.    this.element = e;
  10.    this.prop = p;
  11.    this.setValue = function (value){
  12.     this.element.setAttribute(this.prop, value);
  13.    }
  14.    this.toString = function(){
  15.     return this.element.getAttribute(this.prop);
  16.    }
  17.   }
  18.  window.onload = function (){
  19.   var pr = new propRef(document.getElementById('p'), 'class');
  20.   pr.setValue('piut');
  21.   alert('pr:'+pr+' -- element: '+document.getElementById('p').getAttribute('class'));
  22.  }
  23.      </script>
  24.    
  25.     </head>
  26.     <body>
  27.     <p id="p" class="pouet">paragraphe</p>
  28.     </body>
  29.     </html>

Reply

Marsh Posté le 20-07-2006 à 17:35:08    

:heink:
 
className c'est pas un objet hein... donc tu auras forcément une valeur et non pas une référence dans ta variable.

Reply

Marsh Posté le 20-07-2006 à 17:35:08   

Reply

Marsh Posté le 20-07-2006 à 17:48:59    

gatsu35 a écrit :

Heu elle est bien, mais moi j'aurai préféré avoir un operateur :( malheureusement ca n'existe pas :/


Fais une surcharge ;)
 

gatsu35 a écrit :

tiens sinon, c'est pas plus simple ??  

Code :
  1. ...



Si j'ai tout écrit à la va vite, c'est effectivement miex
 

Arjuna a écrit :

:heink:
className c'est pas un objet hein... donc tu auras forcément une valeur et non pas une référence dans ta variable.


Oui c'était bien sa problèmatique, il cherchait donc un contournement!
 

Reply

Marsh Posté le 20-07-2006 à 18:05:18    

Arjuna a écrit :

:heink:
 
className c'est pas un objet hein... donc tu auras forcément une valeur et non pas une référence dans ta variable.


Nan pas possible [:moule_bite]

Reply

Marsh Posté le 20-07-2006 à 18:06:24    

anapajari a écrit :

Fais une surcharge ;)
 


de quelle manière ?  
on peut surcharger un operateur en JS ?

Reply

Marsh Posté le 20-07-2006 à 18:25:19    

nan nan on peut pas , je deconnais ...
je crois néanmoins que c'est dans le draft du js2.0

Reply

Marsh Posté le 20-07-2006 à 18:29:47    

anapajari a écrit :

nan nan on peut pas , je deconnais ...
je crois néanmoins que c'est dans le draft du js2.0


 :love:

Reply

Marsh Posté le 20-07-2006 à 20:04:55    

Code :
  1. <html>
  2. <head>
  3.  <title>Test de référence en JS</title>
  4.  <script type="text/javascript">
  5.   function init()
  6.   {
  7.    handle1 = getHandle("txtField", "value" );
  8.    handle2 = getHandle("txtField", null);
  9.    handle3 = getHandle("linkField", "style" );
  10.    document.getElementById("txtField" ).onkeyup = test1;
  11.    document.getElementById("txtField" ).onclick = test2;
  12.    document.getElementById("linkField" ).onclick = test3;
  13.   }
  14.   function test1()
  15.   {
  16.    document.getElementById("txtHandle1" ).value = handle1;
  17.   }
  18.   function test2()
  19.   {
  20.    document.getElementById("txtHandle2" ).value = handle2;
  21.   }
  22.   function test3()
  23.   {
  24.    if (handle3.color == 'blue')
  25.     handle3.color = 'red';
  26.    else
  27.     handle3.color = 'blue';
  28.    return false;
  29.   }
  30.   function getHandle(objName, propName)
  31.   {
  32.    if (propName == null)
  33.    {
  34.     return document.getElementById(objName);
  35.    }
  36.    else
  37.    {
  38.     if (typeof(document.getElementById(objName)[propName]) == "object" )
  39.     {
  40.      return document.getElementById(objName)[propName];
  41.     }
  42.     else
  43.     {
  44.      if (typeof(document.getElementById(objName).attributes[propName]) == "object" )
  45.      {
  46.       return new handleObject(document.getElementById(objName).attributes[propName]);
  47.      }
  48.      else
  49.      {
  50.       return new handleObject2(document.getElementById(objName), propName);
  51.      }
  52.     }
  53.    }
  54.   }
  55.   function handleObject(obj)
  56.   {
  57.    this.obj = obj;
  58.    this.toString = function (){return this.obj.value;}
  59.   }
  60.   function handleObject2(obj, propName)
  61.   {
  62.    this.obj = obj;
  63.    this.toString = function (){return eval("obj." + propName);}
  64.   }
  65.   var handle1 = new Object();
  66.   var handle2 = new Object();
  67.   var handle3 = new Object();
  68.   window.onload = init;
  69.  </script>
  70. </head>
  71. <body>
  72.  <form action="#">
  73.   <input type="text" id="txtField"/>
  74.   <input type="text" id="txtHandle1"/>
  75.   <input type="text" id="txtHandle2"/>
  76.   <hr/>
  77.   <a href="#" id="linkField" style="color: blue;">click me</a>
  78.   <hr/>
  79.  </form>
  80. </body>
  81. </html>


 
En porcinant un peu le code, il passe sous Moz aussi maintenant.
Seul le cas où on recherche une propriété de type valeur est émulée sous Moz, car sous IE y'a moyen d'interroger DOM qui est dynamiquement mis à jour contrairement à chez Moz.
 
Par contre, y'a une limitation pour ce type de propriétés : on peut lire les mises à jour, mais si on écrit, ça shoote le handle.
Y'a malheureusement pas de "get" et "set" sur les objets en JS...


Message édité par MagicBuzz le 20-07-2006 à 21:05:40
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed