Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с удалением данных из <select> (https://javascript.ru/forum/misc/3239-problema-s-udaleniem-dannykh-iz-select.html)

konstantinopol 31.03.2009 14:20

Проблема с удалением данных из <select>
 
Есть
Код:

<td><select name="Bundesland" id="Bundesland">
                                <option>Alle</option>
                                    </select>
                        </td>

и функция в которой вписываются значения в select
Код:

function box(region){
        for(h=0;h<region.length;h++){       
                abc=document.createElement('option');
                abc.innerHTML=region[h];
                document.getElementById('Bundesland').appendChild(abc);
        }
}

Но когда вызывается функция все предыдущие значения в select должны быть удалены. Я пробовал это с
document.getElementById('Bundesland').removeChild('option');

(вызываетса перед for)
но ничего не вышло. В чем я ошибся??

Kolyaj 31.03.2009 14:24

removeChild принимает ссылку на удаляемый элемент.

konstantinopol 31.03.2009 14:35

Что бы это значило??
Ну я и хочу удалить все option из select. Что совсем другое надо брать??
Или я неправильно понял функциональность removeChild ...

Kolyaj 31.03.2009 14:40

Строка не может являться ссылкой на элемент.

konstantinopol 31.03.2009 14:48

Либо я туплю либо ты что то не договариваешь.
Я немного потестировал и понял что так не пойдет как я писал в самом начале.
Но я не понимаю как мне отчистить select. Чёрт с ним с removeChild, можно ли это сделать другим способом???

Kolyaj 31.03.2009 14:58

document.getElementById('Bundesland').innerHTML = '';

konstantinopol 31.03.2009 15:01

Супер, спасибо тебе большое

"Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его Kolyaj."

AzriMan 31.03.2009 15:31

несомненно,
document.getElementById('Bundesland').innerHTML = '';
будет проще всего. я бы сделал аналогично :)

а по поводу вопроса. что вы пытаетесь сделать этой строчкой?
document.getElementById('Bundesland').removeChild('option');

я догадываюсь что, поэтому более корректный код ниже. но мне любопытно услышать ответ в любом случае.


function removeElement(element)
{
	element.parentNode.removeChild(element);
	return true;
}

BundeslandOptions = document.getElementById('Bundesland').options;
for (var i=0; i<BundeslandOptions.length; i++)
	removeElement(BundeslandOptions[i]);




--edited.
(продублирую и в этом посте)
приведенный выше код будет производить очистку не до конца , если в селекте будет что-то еще кроме options.
для действительно полной очистки нужно проходиться по всем
document.getElementById('Bundesland').childNodes



--edited x2.
спасибо всем за поправки. приведенный выше код удалит элементы 'options' через одного. для полного удаления нужно воспользоваться циклом while.

konstantinopol 31.03.2009 16:18

Да это тоже можно сделать, просто я незнаю сколько элементов стояло в select до того как я внес туда новые значения. Поэтому сделал так как предложзил Kolyaj.
document.getElementById('Bundesland').removeChild('option');

Этой строкой я пытался очистить select

AzriMan 31.03.2009 16:25

мне без разницы как вы сделали.
у элемента Bundesland нет элемента option!!! у него есть массив с элементами option. поэтому нужно проходиться циклом по каждому элементу, т.к.
Цитата:

Сообщение от Kolyaj (Сообщение 15590)
removeChild принимает ссылку на УДАЛЯЕМЫЙ элемент.

понимаете/нет? ключевое слово - У-ДА-ЛЯ-Е-МЫЙ.


Часовой пояс GMT +3, время: 09:35.