Autor Tema: Operador ternario JavaScript condicional interrogante innerHTML código CU01152E  (Leído 4560 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Solución del ejercicio CU01152E del curso JavaScript desde cero.

Código original:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprendeaprogramar.com</title>
<script type="text/javascript">
function ejemplo() {
var htmlADevolver='';
var colorUsuario=prompt('Elija color red, yellow o blue');
htmlADevolver+= colorUsuario ? '<h1 style="background-color:'+colorUsuario+';"> Usted elegió: '+colorUsuario+'</h1>':'<h1>No elegió color</h1>';
var nodoBody = document.getElementsByTagName('body')[0];
nodoBody.innerHTML = nodoBody.innerHTML + htmlADevolver;
}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemplo()">Probar Ejercicio</div>
</body>
</html>

Preguntas:

Citar
a) ¿Qué significa el operador += que se emplea en el código?

Significa sumar lo siguiente. Por ejemplo, si pone: a+=b es lo mismo que: a=a+b

Citar
b) ¿Por qué usamos [ 0 ] para establecer nodoBody?

Porque  "document.getElementsByTagName('body')" devuelve un Array. Y como sólo existe un elemento con etiqueta "body" y es el primero (más que nada, porque no existen más" y los Arrays siempre se empiezan a contar desde "0", pues para referenciarnos al primer Array con etiqueta "body" tenemos que poner el número del Array [ 0 ].

Citar
c) ¿Qué ocurre si dejamos en blanco la respuesta cuando se pide un color? Razona por qué ocurre esto.

Si no entramos ningún valor a la variable "colorUsuario" el compilador no tendrá ningún valor para poner en la propiedad "background-color", por lo tanto será como no puesta y el fondo del h1 se mostrará como está configurada por defecto por nuestro navegador.

Citar
d) ¿Qué ocurre si escribimos pink cuando nos pide el color? Razona por qué ocurre esto.

Realmente, cuando escribimos en el "prompt" nuestro color (siempre y cuando sea un color válido), este se aplica como color para la propiedad "background-color" de la etiqueta h1. Por eso, cuando ponemos "pink" el JavaScript utiliza el valor de la variable como valor para el "background-color" y lee: "background-color: pink".

Citar
e) Modifica el código para que usando el operador ternario, si el usuario no introduce como color red, yellow o blue aparezca el mensaje ‘No eligió color o el color es no válido’

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprendeaprogramar.com</title>
<script type="text/javascript">
function ejemplo() {
var htmlADevolver='';
var colorUsuario=prompt('Elija color red, yellow o blue');
var msg='El htmlADevolver vale: '+htmlADevolver+'\nY la colorUsuario vale: '+colorUsuario;
alert(msg);
htmlADevolver = colorUsuario=='yellow' || colorUsuario=='red' || colorUsuario=='blue' ? '<h1 style="background-color:'+colorUsuario+';"> Usted elegió: '+colorUsuario+'</h1>':'<h1>No elegió color o el color no es válido</h1>';
var nodoBody = document.getElementsByTagName('body')[0];
nodoBody.innerHTML = nodoBody.innerHTML + htmlADevolver;
}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemplo()">Probar Ejercicio</div>
</body>
</html>

Citar
f) Reescribe el código inicial de partida sustituyendo el condicional ternario por if tradicionales.

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprendeaprogramar.com</title>
<script type="text/javascript">
function ejemplo() {
var htmlADevolver='';
var colorUsuario=prompt('Elija color red, yellow o blue');
var msg='El htmlADevolver vale: '+htmlADevolver+'\nY la colorUsuario vale: '+colorUsuario;
alert(msg);
if(colorUsuario=='yellow' || colorUsuario=='red' || colorUsuario=='blue'){
htmlADevolver ='<h1 style="background-color:'+colorUsuario+';"> Usted elegió: '+colorUsuario+'</h1>'
}else{
htmlADevolver='<h1>No elegió color o el color no es válido</h1>';
}
var nodoBody = document.getElementsByTagName('body')[0];
nodoBody.innerHTML = nodoBody.innerHTML + htmlADevolver;
}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemplo()">Probar Ejercicio</div>
</body>
</html>

PD: En los apartados "e" y "f" coloqué antes de ejecutarse los cambios en el etiqueta "h1" un alert para comprobar los valores de las dos variables. Lo hice con la finalidad de comprobar si se cumplia la función, pero tampoco lo entendí. Supongo que la variable "htmlADevolver" al estar inicializada como una cadena de texto devuelve "true".

Para resolver los apartados "e" y "f" me he servido con la ayuda del foro de "pedro,," desde el siguente enlace:

https://www.aprenderaprogramar.com/foros/index.php?topic=3416.msg14934#msg14934

Gracias.
« Última modificación: 24 de Febrero 2016, 09:56 por César Krall »

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Re:CU01152E JavaScript operador condicional ternario
« Respuesta #1 en: 20 de Febrero 2016, 23:22 »
Hola dimiste,
para el apartado e), el código lo tienes que modificar . Tienes que cambiar la posición donde se encuentra esto
Código: [Seleccionar]
var msg='El htmlADevolver vale: '+htmlADevolver+'\nY la colorUsuario vale: '+colorUsuario;
alert(msg);
estas usando htmlADevolver antes de ser definido con lo que quieres poner. Lo definistes al principio var htmlADevolver =''; y por eso al ejecutarlo te sale vacio.

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Re:CU01152E JavaScript operador condicional ternario
« Respuesta #2 en: 20 de Febrero 2016, 23:25 »
En el apartado f) repasalo porque te pasa lo mismo que en el e)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:CU01152E JavaScript operador condicional ternario
« Respuesta #3 en: 21 de Febrero 2016, 17:46 »
Buenas, bermartinv.

Realmente quería poner este alert sólo en el código inicial, para entender cómo funciona el operador condicional ternario.

El código así puesto:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprendeaprogramar.com</title>
<script type="text/javascript">
function ejemplo() {
var htmlADevolver='';
var colorUsuario=prompt('Elija color red, yellow o blue');
var msg='El htmlADevolver vale: '+htmlADevolver+'\nY la htmlADevolver+colorUsuario vale: '+(htmlADevolver+colorUsuario);
alert(msg);
htmlADevolver+= colorUsuario ? '<h1 style="background-color:'+colorUsuario+';"> Usted elegió: '+colorUsuario+'</h1>':'<h1>No elegió color</h1>';
var nodoBody = document.getElementsByTagName('body')[0];
nodoBody.innerHTML = nodoBody.innerHTML + htmlADevolver;
}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemplo()">Probar Ejercicio</div>
</body>
</html>

entiendo que quiere decir: la variable "htmlADevolver" no vale nada, y si en variable "colorUsuario" tampoco metemos nada, la condición es: htmlADevolver += colorUsuario ?, lo que yo interpreto que es: htmlADevolver = htmlADevolver + colorUsuario ?, lo que sería (en el caso que no metamos nada en "colorUsuario") nada = nada + nada. Es decir, se debería de iniciar la primera opcion:
Código: [Seleccionar]
'<h1 style="background-color:'+colorUsuario+';"> Usted elegió: '+colorUsuario+'</h1>' y no la segunda. Pero pasa justamente lo contrario, se ejecuta la segunda. No lo entiendo.

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Re:CU01152E JavaScript operador condicional ternario
« Respuesta #4 en: 21 de Febrero 2016, 21:47 »
Lo que te decía dimiste que modificaras tu códio cambiando de linea la definición de la variable msg, para que te saliese bien en el alert.

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprendeaprogramar.com</title>
<script type="text/javascript">
function ejemplo() {
var htmlADevolver='';
var colorUsuario=prompt('Elija color red, yellow o blue');

htmlADevolver = colorUsuario=='yellow' || colorUsuario=='red' || colorUsuario=='blue' ? '<h1 style="background-color:'+colorUsuario+';"> Usted elegió: '+colorUsuario+'</h1>':'<h1>No elegió color o el color no es válido</h1>';
            var msg='El htmlADevolver vale: '+htmlADevolver+'\nY la colorUsuario vale: '+colorUsuario;
alert(msg);
var nodoBody = document.getElementsByTagName('body')[0];
nodoBody.innerHTML = nodoBody.innerHTML + htmlADevolver;
}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemplo()">Probar Ejercicio</div>
</body>
</html>
« Última modificación: 26 de Febrero 2016, 09:51 por César Krall »

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas bermartinv.

Pero si lo pongo allí, el valor de la variable "htmlADevolver" ya se habrá modificado y no sabré el valor inicial que tenía. Creo que no me entendiste bien, quería saber si htmlADevolver realemtne es igual ha htmlADevolver + colorUsuario en el caso que no le metamos nada como valor a la primera.


 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".