JavaScript: Guía completa. Alessandra Salvaggio

Чтение книги онлайн.

Читать онлайн книгу JavaScript: Guía completa - Alessandra Salvaggio страница 11

Автор:
Серия:
Издательство:
JavaScript: Guía completa - Alessandra Salvaggio

Скачать книгу

que adoptar una librería externa no valga en absoluto la pena.

      A continuación, podemos utilizar listaLI para mostrar cuántos elementos hay en la lista (tres, en nuestro caso) recurriendo a la propiedad length del objeto listaLI, que precisamente contiene el número de elementos que contiene el objeto.

      const mensaje = `Hay ${listaLI.length} elementos en la lista UL "numeros"`;document.getElementById('output').innerHTML = mensaje`;

      Ahora, vamos a tratar de complicar un poco nuestro ejemplo. En lugar de limitarnos a contabilizar cuántos son los elementos de la lista, también queremos asociar a los elementos LI de esta lista un atributo “value”, cuyo valor expresa el número en cifras.

      En otras palabras, queremos obtener un resultado como el que ves a continuación:

       <ul id="numeros"><li value="1">uno</li><li value="2">dos</li><li value="3">tres</li></ul>

NOTANaturalmente, debemos pensar que tenemos que realizar esta operación de manera dinámica, por ejemplo, porque no podemos modificar nosotros el archivo HTML (creado por otro desarrollador) o porque la misma lista UL ha sido creada dinámicamente.
NOTAPara no complicar demasiado el ejercicio, supongamos que los elementos LI están definidos por orden (“uno”, “dos”...) y que, por tanto, no necesitamos saber que la palabra “dos” indica el número 2, sino que asumiremos simplemente que el primer elemento es 1, el segundo es 2, etc.

      Esto significa que debemos repetir la operación de agregar los atributos value varias veces, una para cada elemento de la lista. Para ejecutar estas operaciones, recurrimos a uno de los muchos bucles que JavaScript pone a nuestra disposición: el bucle for con índice.

      Su forma es la siguiente:

      for (valor índice inicial; valor máximo del índice; cuánto aumenta el índice) {instrucciones a repetir}

      Por ejemplo, el bucle:

       for (let i=1; i <= 10; i+=1) {instruccion(i); }

      repite la instrucción 10 veces, con la variable índice i, que asume valores del 1 (i=1) al 10 (i <= 10), con paso 1 (i += 1): 1, 2, 3 hasta 10. Cuando i llega a 11, el bucle termina y la ejecución continúa desde la línea siguiente.

NOTAEs habitual asignar un nombre corto, como i, j, k, a las variables índice de los bucles.

      En nuestro ejemplo, hemos utilizado el operador de asignación compuesta, que combina un operador aritmético (+, en este caso) con el operador de asignación (=).

      Con este operador, conseguimos realizar rápidamente 5 de i, añade 1 y asigna el resultado a i”.

      La notación:

      i+=1

      corresponde a:

      i = i+1

      El operador de asignación compuesta proporciona una solución más sintética y con menos probabilidades de error, dado que no se debe repetir el nombre de la variable sobre la que se trabaja.

      Una alternativa a este operador es el operador de autoincremento (i++), que desarrolla la misma función.

      La diferencia principal entre el operador de asignación compuesta (i+=1) y el operador de autoincremento (i++) consiste en el hecho que el primero permite incrementos de distintas unidades (i+=2, por ejemplo), mientras que el segundo permite solo incrementos de una unidad.

      Volviendo a nuestro problema, podemos añadir al código mostrado anteriormente el bucle siguiente:

      for (let i=0; i < listaLI.length; i+=1) {listaLI.item(i).value = i+1;}

       Puedes encontrar este ejemplo en el archivo bucles2 .html

      Analicemos con detalle este código.

      El bucle empieza por el número 0 y acaba antes del 3 (el valor de listaLI.length), es decir, el bucle se ejecuta 3 veces (cuando i=0, cuando i=1 y cuando i=2) y se interrumpe cuando i=3 (i < listaLI.length).

      La instrucción contenida en el bucle for (es decir, que se repite en cada iteración del bucle):

      listaLI.item(i).value = i+1;

      utiliza el conjunto de valores item que representa el conjunto de elementos LI que se encuentran en nuestra lista UL.

      Cada elemento (es decir, cada elemento LI) tiene una posición determinada en el conjunto. Podemos acceder a un elemento en concreto indicando entre los paréntesis de item un número que representa su posición.

      En la primera ejecución del bucle, accedo al elemento en la posición 0 (i al inicio vale 0), en la segunda repetición, accedo al elemento en la posición 1 (i ha aumentado una unidad), en la tercera y última, accedo al elemento en la posición 2 (i ha aumentado otra unidad).

      En nuestro caso específico:

      •En la primera vuelta del bucle for, i = 0 y listaLI.item(i) indica el elemento LI “uno”.

      •En la vuelta siguiente, i = 1 y listaLI.item(i) indica el elemento LI “dos”.

      •En la tercera y última vuelta, i = 2 y listaLI.item(i) indica el elemento LI “tres”.

      Observa que en JavaScript los conjuntos de valores (como listaLI) siempre tienen índices que empiezan desde 0: el primer elemento tiene índice (posición) 0, el segundo tiene índice 1 y así sucesivamente.

      Ahora que ya hemos visto cómo acceder a los distintos elementos LI, debemos precisar que con listaLI.item(i).value accedemos al atributo value del elemento LI: si el atributo value ya no existe, se crea y se le asigna un valor, si no, solo se modifica el valor.

      Con la instrucción listaLI.item(i).value = i+1 fijamos el valor de value al valor del índice aumentado en una unidad (para compensar el hecho de que el índice empieza desde 0 mientras que los números de la lista lo hacen desde 1).

      Seguramente has observado que, en este caso, hemos escrito i + 1 y no i+=1 o i+. Esto es así porque no estamos modificando el valor de i, sino que solo lo estamos utilizando (leyendo) y, de hecho, es la instrucción for la que se ocupa de gestionar el incremento de la variable índice en cada vuelta o bucle.

      Sin embargo, si ejecutamos en el navegador este código, no percibimos su acción (estamos actuando a nivel de código HTML con una modificación que

Скачать книгу