Создание резервного массива с объектами DOM - PullRequest
1 голос
/ 17 ноября 2011

У меня есть <select> элемент a с разными option с.При загрузке страницы я хочу сохранить эти option s в качестве резервной копии (я делаю это с window.onload).

Теперь пользователь меняет <select> элемент b , который удаляет некоторые option s в <select> элемент a .После некоторых других изменений элемента <select> b я хочу восстановить option s элемента a с помощью моей резервной копии из автозагрузки.

Но нетнесмотря ни на что, изменения на option, похоже, относятся к обоим массивам.

Я создал резервный массив с new Array и push, каждый из которых option перевел в новыймассив.Я надеялся, что это предотвратит их удаление из массива при удалении из DOM.

Любые подсказки, как мне решить эту проблему?


function cacheOptions() {
    backupOptions = newArray(document.getElementById("selectElement").options);
}

function newArray(oldArray) {
    var newArray = new Array(oldArray.length);
    for ( var object in oldArray) {
        newArray.push(object);
    }
    return newArray;
}

Иудаление option s методом onchange

document.getElementById("selectElement").options[i].remove();

1 Ответ

0 голосов
/ 17 ноября 2011
  1. Никогда не используйте for in для циклического перемещения по массиву; используйте обычную for петлю
  2. Вы можете создать массив с arr = []; длина будет установлена ​​автоматически
  3. Вы добавляете индексы старого массива в новый массив; не их значения

В любом случае, вы можете просто использовать [].slice.call(arr), чтобы получить массив из объекта, похожего на массив.

Итак, вам лучше всего избавиться от функции newArray и изменить функцию cacheOptions на:

function cacheOptions() {
    backupOptions = [].slice.call(document.getElementById("selectElement").options);
}
...