Удаление всех 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, время: 23:18. |