Ver Mensaje Individual
  #14 (permalink)  
Antiguo 28/06/2010, 09:01
Avatar de Tecna
Tecna
 
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 4 meses
Puntos: 45
Respuesta: ¿como se guarda en una variable el name de un objeto?

Buenas,

en el primer código que mostraste, la función cambianoticia() da error porque el método getElementsByName devuelve un array aunque sea de un único elemento ya que el atributo name si se puede repetir, por tanto deberías referirte a los elementos de iduno a través de su índice, iduno[0], iduno[1]..

Por otro lado y como ya bien se ha dicho los id no pueden comenzar por un número y producirían un error en la validación html y además que los estilos css se ignoren si se declara un DTD correcto, que es lo recomendable. En javascript no produce error porque lo que se recibe del html (el atributo id entre otras cosas) siempre es texto y el argumento que espera el método getElementById es del tipo cadena, además javascript se toma la libertad de cambiar el tipo si es necesario y si se pasara un número como argumento de getElementById lo convertiría en cadena, con lo que ya no empezaría por un número y por eso funciona, aunque sea incorrecto. Pero a veces puede haber resultados inesperados por el resultado de la conversión de número a cadena cuando se obtiene el id dinamicamente. Siguiendo el ejemplo de antes, si el id es el número 6 se convierte a la cadena '6' y no hay problema, pero si el número fuera 06 se convertiría en la cadena '6' y el resultado no sería el esperado. Por ejemplo:

Código HTML:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  3. <script type="text/javascript">
  4. function funcion() {
  5. alert(document.getElementById('6').id); // muestra 6. El id es la cadena'6'
  6. alert(document.getElementById(6).id);  // muestra 6 El numero 6 se transforma en la cadena '6'
  7. alert(document.getElementById('06').id);  // muestra 06 El id es la cadena '06'
  8. alert(document.getElementById(06).id);  // muestra 6 y deberia mostrar 06
  9. document.getElementById(06).innerHTML = 'deberia cambiar el contenido del elemento con id 06 pero cambia el de id 6';
  10. // porque hace el la conversion del numero 06 y el 0 se ignora
  11.  
  12.  
  13. document.getElementById('06').innerHTML = 'asi si que cambia el que debe porque se convierte en una cadena correctamente';
  14. // porque al poner las comillas el 0 también forma parte de la cadena
  15.  
  16. var iduno=document.getElementsByName("ultimanoticia");
  17. alert (iduno[0].id);  // muestra 6
  18. }
  19.  
  20. </head>
  21. <input type="button" onclick="funcion()" value="ver" />
  22. <div id="6" name="ultimanoticia" class="visible">
  23. <p>
  24. Noticia 6
  25. </p>
  26. </div>
  27. <div id="06" name="ultimanoticia" class="visible">
  28. <p>
  29. Noticia 06
  30. </p>
  31. </div>
  32. </body>
  33. </html>

es sólo un ejemplo de los problemas que puede causar y por qué aparentemente no da error en javascript puesto que lo convierte en cadena pero es incorrecto según el estandar html y la especificación css, que es donde se define.