Foros del Web » Programando para Internet » Javascript »

Eliminar los combos de un combobox

Estas en el tema de Eliminar los combos de un combobox en el foro de Javascript en Foros del Web. Hola a todos. Tengo un problema y duda al momento de eliminar los nodos hijos de un select. Primero recorro todos los nodos hijos del ...
  #1 (permalink)  
Antiguo 17/11/2011, 17:58
 
Fecha de Ingreso: mayo-2010
Mensajes: 8
Antigüedad: 13 años, 10 meses
Puntos: 0
Eliminar los combos de un combobox

Hola a todos.

Tengo un problema y duda al momento de eliminar los nodos hijos de un select.
Primero recorro todos los nodos hijos del select para despues eliminar uno a uno esos nodos por cada recorrido que haga, mi problema es que solo me elimina los nodos impares dejando los pares son eliminar.

Este es mi script de javascript
Código Javascript:
Ver original
  1. function Cdelete(){
  2.         var select = document.getElementById("selectCombo");
  3.         var combos = document.getElementsByTagName("option");
  4.  
  5.         for(i=0; i<combos.length; i++){
  6.             select.removeChild(combos[i]);
  7.             alert(i)
  8.         }
  9.     }

Y mi HTML es este.
Código HTML:
Ver original
  1. <select id="selectCombo">
  2.     <option value="1">1</option>
  3.     <option value="2">2</option>
  4.     <option value="3">3</option>
  5.     <option value="4">4</option>
  6.     <option value="5">5</option>
  7.   </select>
  8.   <input type="button" value="Click" onclick="Cdelete()" />

Espero puedan ayudarme, muchas gracias.
  #2 (permalink)  
Antiguo 18/11/2011, 17:19
 
Fecha de Ingreso: julio-2011
Mensajes: 220
Antigüedad: 12 años, 9 meses
Puntos: 72
Respuesta: Eliminar los combos de un combobox

El asunto es asi; en la primera vuelta del bucle for i tiene el valor 0 y dentro del bucle se tiene esta instrucción:
select.removeChild(combos[i]);
Con esto se elimina el <option>1</option> que ocupa el índice 0, al ocurir esto los otros <option> recorren sus posiciones dentro del select, ahora el <option>2</option> ocupa el índice 0, el <option>3</option> ocupa el índice 1 el <option>4</option> ocupa el índice 2 y asi sucesivamente. Luego en la segunda vuelta del bucle i aumenta su valor a 1 y al cumplirse la sentencia:
select.removeChild(combos[i]);
Se elimina el <option>3</option> que ahora ocupa el índice 1 y el resto de <option> vuelven a recorrerse con lo que el <option>4</option> pasa a ocupar el índice 1 y el <option>5</option> se situa en el índice 2. En la siguiente vuelta i tiene el valor 2 por lo tanto se elimina el <option> que esta ocupando el índice 2, el cuál en ese momento es el <option>5</option>. Por último, en la siguiente vuelta i vale 3 pero en ese momento ya no exite ningún <option> ocupando esa posición debido a esto la sentencia para eliminar no se puede cumplir y el bucle es abandonado, resultando ser eliminados solo los <option> 1, 3 y 5 que es algo no deseado. Para eliminar secuencialmente los nodos hijos de un elemento lo común es emplear un bucle while conjuntamente con el método hasChildNodes() de esta forma.

Código Javascript:
Ver original
  1. function Cdelete()
  2. {
  3.   var select= document.getElementById("selectCombo");
  4.   while(select.hasChildNodes())
  5.   {
  6.     select.removeChild(select.firstChild);
  7.    }
  8. }

El método hasChildNodes() retorna true mientras el <select> tenga nodos hijos y al método removeChild() se le pasa siempre como parámetro la refencia al primer nodo hijo del <select>.

Etiquetas: combobox, combos, html, input
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 03:12.