Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] No logro acceder a un elemento.

Estas en el tema de No logro acceder a un elemento. en el foro de Javascript en Foros del Web. Hola a todos. Estoy queriendo terminar una página web con html,css y javascript. Pero tengo este problema. Tengo una función que se llama mostrar_precio que ...
  #1 (permalink)  
Antiguo 05/12/2014, 13:25
 
Fecha de Ingreso: febrero-2014
Ubicación: Rosario
Mensajes: 59
Antigüedad: 10 años, 2 meses
Puntos: 2
No logro acceder a un elemento.

Hola a todos.
Estoy queriendo terminar una página web con html,css y javascript.
Pero tengo este problema.
Tengo una función que se llama mostrar_precio que recibe un argumento que es un elemento y otro argumento que es el precio a insertar.
Yo paso "this" a la función esperando poder acceder al hijo de texto del hermano siguiente de su padre (elemento.parentElement.nextSibling.childNodes[1].innerHTML = precio;),pero no lo consigo.
La consola web de firefox me indicó la anterior instrucción "undefined".

Acá les paso el código y por favor explíquenme ¿por qué undefined?
Código HTML:
Ver original
  1. <div>
  2.                 <div>
  3.                     <img src="../img/sublineas/ojos/sombra-individual.jpg"><span>SOMBRAS COMPACTAS INDIVIDUALES.<br />Sombras para ojos de gran cobertura, aterciopeladas y con excelente deslizamiento. Su textura sedosa facilita la aplicaci&oacute;n perfecta del color. Con ingredientes de polvo altamente micronizados que garantizan un maquillaje duradero. Pueden combinarse con otros tonos para crear m&uacute;ltiples combinaciones de color y diferentes looks de tendencia. Contienen vitamina E y filtro solar.</span>
  4.                 </div>
  5.                 <div>
  6.                     <img src="../img/COL128700D.jpg"><img src="../img/COL128800D.jpg"><img src="../img/COL131700D.jpg">
  7.                 </div>
  8.                 <div>
  9.                     <a href="#">A&ntilde;adir al carrito</a>
  10.                     <span>$43,50.</span>
  11.                 </div>
  12.                 <div>
  13.                     <img src="../img/sublineas/ojos/sombra-duo.jpg"><span>Sombras compactas d&uacute;o.<br />La combinaci&oacute;n perfecta de dos colores para lograr una mirada cautivante. Su textura sedosa permite un trabajo preciso de los colores y el aplicador de punta aterciopelada difumina perfectamente la sombra. Para lograr el efecto deseado, primero se recomienda aplicar el tono m&aacute;s claro sobre el p&aacute;rpado, y luego, difuminar el tono m&aacute;s oscuro en el pliegue del ojo.</span>
  14.                 </div>
  15.                 <div>
  16.                     <img src="../img/COL130300D.jpg" onmouseover="mostrar_precio(this,'52,90')"><img src="../img/COL130500D.jpg" onmouseover="mostrar_precio(this,'52,90')"><img src="../img/COL128400D.jpg" onmouseover="mostrar_precio(this,'114,90')">
  17.                 </div>
  18.                 <div>
  19.                     <a href="#">A&ntilde;adir al carrito</a>
  20.                     <span>$114,90.</span>
  21.                 </div>
  22.                 <div>
  23.                     <img src="../img/sublineas/ojos/mascaras.jpg"><span>M&aacute;scaras de pesta&ntilde;as.<br />Tres colores arm&oacute;nicamente combinados para lograr un look sofisticado. Su textura sedosa permite un trabajo preciso de los colores y el aplicador de punta aterciopelada difumina perfectamente la sombra. Para lograr el efecto deseado, primero se recomienda aplicar el tono m&aacute;s claro sobre el p&aacute;rpado y difuminarlo con el tono medio hacia el costado exterior; luego, lograr profundidad aplicando el tono m&aacute;s oscuro en el pliegue del ojo.</span>
  24.                 </div>
  25.                 <div>
  26.                     <img src="../img/COL140100D.jpg">&nbsp;<img src="../img/COL140800D.jpg">&nbsp;<img src="../img/COL140800D.jpg">
  27.                 </div>
  28.                 <div>
  29.                     <a href="#">A&ntilde;adir al carrito</a>
  30.                     <span>$94,90.</span>
  31.                 </div>
  32.                 <div>
  33.                     <img src="../img/sublineas/ojos/delineadores.jpg"><span>Delineadores de ojos.<br />F&oacute;rmulas excepcionales para lograr pesta&ntilde;as m&aacute;s fuertes, sanas y visiblemente m&aacute;s largas. Cero grumos. Contienen pigmentos naturales y fibras de seda que aumentan el volumen de las pesta&ntilde;as. Sus pinceles est&aacute;n especialmente dise&ntilde;ados para generar una definici&oacute;n de alto impacto. Variedad de tonos.</span>
  34.                 </div>
  35.                 <div>
  36.                     <img src="../img/COL154700D.jpg" onmouseover="javascript:documentElement.nextSibling.childNodes[1].innerHTML='59,90';">&nbsp;<img src="../img/COL154800D.jpg" onmouseover="mostrar_precio(this,'23,90')"><img src="../img/COL152500D.jpg" onmouseover="mostrar_precio(this,'59,90')"><img src="../img/COL153000D.jpg" onmouseover="mostrar_precio(this,'34,90')">
  37.                 </div>
  38.                 <div>
  39.                     <a href="#">A&ntilde;adir al carrito</a>
  40.                     <span>$94,50.</span>
  41.                 </div>
  42.             </div>
  43.         </div>
  44.     </body>
  45. </html>
Acá está el pequeñísimo código javascript:

Código Javascript:
Ver original
  1. function mostrar_precio(elemento,precio) {
  2.     elemento.parentNode.nextSibling.childNodes[1].innerHTML = precio;
  3. }

Les agradezco.
  #2 (permalink)  
Antiguo 05/12/2014, 14:06
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: No logro acceder a un elemento.

Como los elementos están uno debajo de otro, se genera un nodo de texto de espacio en blanco, por lo que ese vendría a ser el siguiente elemento hermano del que haces referencia. En lugar de nextSibling, utiliza nextElementSibling.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 05/12/2014, 16:16
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: No logro acceder a un elemento.

este es el articulo al que haces referencia. lo curioso es que habla del comportamiento de navegadores modernos. con un ejemplo se verá mejor
Cita:
<div id="div-01">Here is div-01</div>
<div id="div-02">Here is div-02</div>

<script type="text/javascript">
console.log(document.getElementById('div-01').nextSibling);
console.log(elemAdjacente(document.getElementById( 'div-01'), 'nxt'))


function elemAdjacente(elm, adj) {

if (adj == 'nxt') {

var elemento = elm.nextElementSibling || elm.nextSibling;

} else {

var elemento = elm.previousElementSibling || elm.previousSibling;
}


if (elemento == null || elemento.nodeType != 1) {

return null;

} else {

return elemento;
}
}
</script>
retorna
  • chrome, ff, ie9 --> #text y <div id=​"div-02">​Here is div-02​</div>​
  • <=ie8 --> [object HTMLDivElement] y [object HTMLDivElement]
en cuanto al problema del usuario se resuelve así
Cita:
function mostrar_precio(elemento,precio) {
elemAdjacente(elemento.parentNode, 'nxt').querySelector('span').innerHTML = precio;
}
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #4 (permalink)  
Antiguo 06/12/2014, 14:05
 
Fecha de Ingreso: febrero-2014
Ubicación: Rosario
Mensajes: 59
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: No logro acceder a un elemento.

Hola.
Gracias a todos por haberme asistido.
La solución me funcionó pero sólo para la última parte del archivo html.
Me estoy descargando esa parte de la especificación DOM completa para entenderlo mejor y no tener que estar preguntando a cada rato por estas menudencias.(para lo cual estoy usando httrack y me descargo la especificación completa).
Les agradezco.

Pd:Voy a marcar este tema como solucionado.

Etiquetas: html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:58.