从<select>动态删除大量<options>

时间:2017-10-03 11:59:49

标签: javascript jquery html performance

有没有人有任何解决方案来提高删除/添加&lt;选项&gt;时的速度来自&lt; select&gt;当它有60k +元素? 我有一个带有两个&lt; select&gt;的表单,让我们称之为selectA和selectB。我想要在更改selectA时更改selectB的值。喜欢(代码不起作用,只是为了想法): 如果selectA = option1     然后选择B.options = [opt1_1,opt1_2,opt1_3,...] 否则如果selectA = option2     然后selectB.options = [opt2_1,opt2_2,opt2_3,...] ... 我有一个(非常巨大的)变量,它给出了与selectA值相关的selectB选项列表。 我已经找到了很多关于这种事情的例子,它适用于小例子。现在,我有类似的话: $(document).ready(function(){     $(&#34; #selectB&#34;)。html(&#34;&lt;选项值=&#39;&#39; slected =&#39;选择&#39;&gt;选择SelectA优先&lt; /选项&gt ;&#34);     $(&#34; #selectA&#34;)。change(function(){         var val = $(this).val();         var options = // ...使用所有&lt;选项&gt;&lt; / options&gt;生成的字符串取决于$ val         $(&#34;#selectB&#34)的HTML(选项)。     }); }); 这是一团糟,因为selectB是一个IPv4列表,可以包含一个完整的/ 16。这就是要处理的60k +元素(ouch ^^)。这就是为什么我不想在选择中选择所有选项,而是选择&#34;预先选择&#34;用selectA然后&#34;子选择&#34;用selectB。 我希望最初在HTML表单中包含所有可能的IP,原因如下:即使未启用JS,用户也必须能够选择一个IP(服务器检查selectA和selectB的选择是否对应)。并且只有在启用JS的情况下,我才会从selectB中删除所有内容,并在selectA更改时仅添加我想要的值。所以你可能会说,无论如何没有JS的用户都可以选择一个选项,而不加载1GB + RAM的选项,并等待5-10分钟来加载每个选项,但我也希望页面能够正常工作只有少数选项可以像1k一样显示。 我承认我很惊讶我的浏览器(FF)很快处理页面的创建。但是当JS删除所有选项时,一切都冻结了: $(&#34; #selectB&#34;)。html(&#34;&lt;选项值=&#39;&#39; slected =&#39;选择&#39;&gt;选择SelectA优先&lt; /选项&gt ;&#34); 我设法调试的是,浏览器需要卸载/删除每个选项需要花费时间。实际上创建它们并不是那么慢。 所以我想知道是否有比我现在正在做的更快的解决方案。如何加快删除所有&lt;选项&gt;在selectB? 任何建议都欢迎来自JS的简单更改,以便将HTML的整个结构更改为不使用&lt; select&gt;但别的东西(我不知道)。

0 个答案:

没有答案