Удаление всех 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;
}
}
Кто-нибудь знающий может объяснить, почему не работает первый способ??? Очень важно понять логику работы, без нее никуда |
Цитата:
<!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>
|
Потому что это коллекция а не массив. И после каждого удаления она становится короче и индексы перестраиваются (вроде бы)
|
Цитата:
И если есть, то пожалуйста, объясните какая |
Цитата:
У массива индексы только целые числа. У объекта индексами может быть не только целые и не только числа... |
Цитата:
|
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, сам массив не меняется. |
danik.js, спасибо за разъяснение. :yes:
|
Цитата:
как она правильно называется?? |
Цитата:
|
| Часовой пояс GMT +3, время: 14:48. |