使用 DOM 对象创建备份数组

发布于 2024-12-15 22:21:48 字数 903 浏览 0 评论 0原文

我有

现在,用户更改 元素中的一些 option 一个。在对

但无论如何,选项上的更改似乎适用于两个数组。

我使用 new Array 创建了备份数组,并将每个选项推送到新数组中。我希望这可以防止它们在从 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;
}

并删除 onchange 方法中的 option...

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

I've got <select> element a with different options. When loading the page, I want to store these options as a backup (I'm doing this with window.onload).

Now the user changes <select> element b, which removes some options in <select> element a. After some other change on <select> element b, I want to restore the options of element a with my backup from the startup.

But no matter what, the changes on the options seem to apply to both arrays.

I've created the backup arrray with new Array and pushed each of the options into the new array. I hoped that this would prevent them from being removed from the array when they're removed from the DOM.

Any hints how I can solve this problem?


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;
}

And removing the options in an onchange method …

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑脸一如从前 2024-12-22 22:21:48
  1. 切勿使用 for in 循环数组;使用普通的 for 循环
  2. 您可以使用 arr = [] 创建一个数组;长度将自动设置
  3. 您将旧数组的索引附加到新数组;不是它们的值

无论如何,您可以使用 [].slice.call(arr) 从类似数组的对象获取数组。

因此,您最好摆脱 newArray 函数,并将 cacheOptions 函数更改为:

function cacheOptions() {
    backupOptions = [].slice.call(document.getElementById("selectElement").options);
}
  1. Never use for in to loop over an array; use a normal for loop
  2. You can make an array with arr = []; the length will be set automatically
  3. You're appending the indexes of the old array to the new array; not their values

Anyhow, you can just use [].slice.call(arr) to get an array from an array-like object.

So, you'd best get rid of the newArray function, and change the cacheOptions function to:

function cacheOptions() {
    backupOptions = [].slice.call(document.getElementById("selectElement").options);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文