Проблема с удалением данных из <select>
Есть
Код:
<td><select name="Bundesland" id="Bundesland"> Код:
function box(region){ document.getElementById('Bundesland').removeChild('option'); (вызываетса перед for) но ничего не вышло. В чем я ошибся?? |
removeChild принимает ссылку на удаляемый элемент.
|
Что бы это значило??
Ну я и хочу удалить все option из select. Что совсем другое надо брать?? Или я неправильно понял функциональность removeChild ... |
Строка не может являться ссылкой на элемент.
|
Либо я туплю либо ты что то не договариваешь.
Я немного потестировал и понял что так не пойдет как я писал в самом начале. Но я не понимаю как мне отчистить select. Чёрт с ним с removeChild, можно ли это сделать другим способом??? |
document.getElementById('Bundesland').innerHTML = ''; |
Супер, спасибо тебе большое
"Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его Kolyaj." |
несомненно,
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. |
Да это тоже можно сделать, просто я незнаю сколько элементов стояло в select до того как я внес туда новые значения. Поэтому сделал так как предложзил Kolyaj.
document.getElementById('Bundesland').removeChild('option'); Этой строкой я пытался очистить select |
мне без разницы как вы сделали.
у элемента Bundesland нет элемента option!!! у него есть массив с элементами option. поэтому нужно проходиться циклом по каждому элементу, т.к. Цитата:
|
Теперь понял что вы от меня пытались до меня донести.
Вопрос какой из вариантов быстрее раборает ... |
Цитата:
насчет быстродействия - мне интересно посмотреть, как вы будете рассуждать. что, по вашему мнению, будет выполняться быстрее? и почему? |
Я бы сказал что вариант
document.getElementById('Bundesland').innerHTML = ''; будет выполняться быстрее. Потому, что в нем просто берётся элемент Bundesland и его содержимое приравниватся к пустому значеную(незнаю как правильно это описать). А во втором случае надо узнать величину масива и удалять каждый элемент по отдельности, а это занимает время. Хотелось бы услышать ваше мнение. |
да. совершенно верно. как приятно, когда человек начинает рассуждать сам.
но только я внесу две поправки. 1. не путайте глаголы "приравниваться" и "присваиваться". 2. величина массива будет вычисляться каждую итерацию. вместе с удалением элемента. --edited. приведенный выше мною код будет производить очистку не до конца , если в селекте будет что-то еще кроме options. для действительно полной очистки нужно проходиться по всем document.getElementById('Bundesland').childNodes |
Да, эти 2 момента я упустил. Впредь буду внимательнее.
Благодарю за потраченое на меня время, теперь я вроде разобрался в этой теме. |
Пожалуйста. обращайтесь еще.
|
Цитата:
|
это частая ошибка при удалении... Надо использовать while
|
да, совершенно верно. удалится половина элементов через одного.
был вопрос про options, я и написал для options. потом через несколько постов внес правку: --edited. приведенный выше мною код будет производить очистку не до конца , если в селекте будет что-то еще кроме options. для действительно полной очистки нужно проходиться по всем document.getElementById('Bundesland').childNodes но, можно и через while. по сути, через while, даже, будет быстрее :) |
AzriMan,
он удалит options через одного. |
да. действительно. спасибо. раньше не приходилось сталкиваться с этим. на будущее, если будет необходимо - буду делать через while.
если у кого-то возникнет вопрос, а почему options удалятся через одного? - поясняю. BundeslandOptions = document.getElementById('Bundesland').options; for (var i=0; i<BundeslandOptions.length; i++) removeElement(BundeslandOptions[i]); допустим, есть список: BundeslandOptions[0] = 0 BundeslandOptions[1] = 1 BundeslandOptions[2] = 2 BundeslandOptions[3] = 3 BundeslandOptions[4] = 4 после удаления BundeslandOptions[0] список примет вид: BundeslandOptions[0] = 1 BundeslandOptions[1] = 2 BundeslandOptions[2] = 3 BundeslandOptions[3] = 4 , в то время, как i уже будет равен единице. следовательно элемент "BundeslandOptions[0] = 1" пропустится из удаления. |
Часовой пояс GMT +3, время: 07:34. |