Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.11.2012, 15:16
Интересующийся
Отправить личное сообщение для Ceргей Посмотреть профиль Найти все сообщения от Ceргей
 
Регистрация: 04.01.2012
Сообщений: 23

Удаление всех options в select
Не могу разобраться в логике javascript`а.
Тестировано в Operе Linux
Пытаюсь удалить все options таким методом, что-то остается удаляется не все:
function del(id){
var sel = window.document.getElementById(id);
var opts = sel.options;
for(var i = 0; i<opts.length; i++){
opts[i] = null;
}
}

Но когда удаляю другим способом, все удаляется
function del(id){
var sel = window.document.getElementById(id);
var opts = sel.options;
while(opts.length > 0){
opts[opts.length-1] = null;
}
}

Кто-нибудь знающий может объяснить, почему не работает первый способ???
Очень важно понять логику работы, без нее никуда
Ответить с цитированием
  #2 (permalink)  
Старый 26.11.2012, 15:59
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от Ceргей
Пытаюсь удалить все options
Как вариант...

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function test() {
	document.getElementById('test').innerHTML='';
};
</script>
</head>
<body>
<select id='test'>
	<option></option>
	<option>1</option>
	<option>2</option>
	<option>3</option>
</select>
<button onclick='test()'>Del</button>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 26.11.2012, 16:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Потому что это коллекция а не массив. И после каждого удаления она становится короче и индексы перестраиваются (вроде бы)
Ответить с цитированием
  #4 (permalink)  
Старый 27.11.2012, 04:31
Интересующийся
Отправить личное сообщение для Ceргей Посмотреть профиль Найти все сообщения от Ceргей
 
Регистрация: 04.01.2012
Сообщений: 23

Сообщение от danik.js Посмотреть сообщение
Потому что это коллекция а не массив. И после каждого удаления она становится короче и индексы перестраиваются (вроде бы)
А вообще есть ли разница в работе циклов если ты работаешь с коллекциями и массивами?
И если есть, то пожалуйста, объясните какая
Ответить с цитированием
  #5 (permalink)  
Старый 27.11.2012, 08:53
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от Ceргей
есть ли разница в работе циклов если ты работаешь с коллекциями и массивами?
В JS есть массивы и объекты... Где массив частный случай объекта (в моём понимании).
У массива индексы только целые числа. У объекта индексами может быть не только целые и не только числа...
Ответить с цитированием
  #6 (permalink)  
Старый 27.11.2012, 08:55
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от danik.js
после каждого удаления она становится короче и индексы перестраиваются
Просто длина уменьшается...
Ответить с цитированием
  #7 (permalink)  
Старый 27.11.2012, 11:09
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

var collection = document.createElement('select').options

collection // []
collection instanceof Array // false
collection instanceof HTMLCollection // true
collection.push // undefined

collection.add(document.createElement('option'))
collection.add(document.createElement('option'))

collection // [ <option>​</option>​, <option>​</option>​ ]
collection.length //2
collection[0] // <option>​</option>​
collection[1] // <option>​</option>​

collection[0] = null

collection.length // 1
collection[0] // <option>​</option>​
collection[1] // undefined

var array = []
array // []
array instanceof Array // true

array.push('a')
array.push('b')

array // ["a", "b"]
array.length // 2

array[0] = null  //array [null, "b"]

array.length //2


коллекция - "живой" набор элементов. Если элемент из набора исчезает или добавляется коллекция тутже меняется. Присваивая collection[i] = null мы удаляем ссылку на элемент, и элемент из коллекции автоматически исчезает. Присваивая array[i] = null , мы просто выставляем значение элементу массива null, сам массив не меняется.
Ответить с цитированием
  #8 (permalink)  
Старый 27.11.2012, 13:27
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

danik.js, спасибо за разъяснение.
Ответить с цитированием
  #9 (permalink)  
Старый 27.11.2012, 16:49
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от danik.js
коллекция - "живой" набор элементов. Если элемент из набора исчезает или добавляется коллекция тутже меняется. Присваивая collection[i] = null мы удаляем ссылку на элемент, и элемент из коллекции автоматически исчезает. Присваивая array[i] = null , мы просто выставляем значение элементу массива null, сам массив не меняется.
я называю эту структуру данных "жидкий лист" (Fluid List).

как она правильно называется??
Ответить с цитированием
  #10 (permalink)  
Старый 28.11.2012, 08:36
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от melky
как она правильно называется?
В MSDN так и писали collection...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор всех Select kvaleksandr Элементы интерфейса 12 27.10.2012 20:55
Удаление всех строк внутри tbody stos Общие вопросы Javascript 9 06.01.2012 17:57
Установка кнопкой всех значений SELECT одинаково Лавсановые Волокна Элементы интерфейса 3 28.12.2010 13:28
массив options для select (в IE) Polkan Internet Explorer 8 06.05.2010 17:31
Передача всех Options из Select (не только выбранных) dm1tr1y Общие вопросы Javascript 6 23.03.2009 18:51