Javascript 哪条路更好?在对象数组中存储DOM对象还是直接进行DOM操作?
标题可能不太清楚,但让我解释一下我所说的“哪种方式更好?将DOM对象存储在对象数组中还是直接进行DOM操作?” 我有一个DOM对象列表供解释:Javascript 哪条路更好?在对象数组中存储DOM对象还是直接进行DOM操作?,javascript,performance,dom,Javascript,Performance,Dom,标题可能不太清楚,但让我解释一下我所说的“哪种方式更好?将DOM对象存储在对象数组中还是直接进行DOM操作?” 我有一个DOM对象列表供解释: <ul> <li></li> ... </ul> ... lis是动态的,根据某些操作进行更新 我们的要求是,检查列表是否已经包含了与新文本相同的元素,例如,考虑一个文件列表并重命名一个节点,如果该名称已经存在,删除包含相同文本的所有DOM对象并生成最新的一个(希望这是非常清楚的)。 现在
<ul>
<li></li>
...
</ul>
...
li
s是动态的,根据某些操作进行更新
我们的要求是,检查列表是否已经包含了与新文本相同的元素,例如,考虑一个文件列表并重命名一个节点,如果该名称已经存在,删除包含相同文本的所有DOM对象并生成最新的一个(希望这是非常清楚的)。
现在,我和我的一位同事正在进行讨论,讨论内容如下:
我的同事说,将DOM对象存储在一个对象数组中,然后将它们附加到列表中,然后在执行所谓的重命名操作时,循环遍历存储对DOM元素的引用的对象数组,并执行删除操作,然后生成新节点操作,因为他认为从DOM中获取元素效率会更低
我的想法是,不要存储列表并消耗内存,因为DOM可能会在任何给定的时间点更新,所以每次要删除和添加节点时,都要获取列表,执行循环并执行操作,因为我相信如果存储列表,您将消耗内存,并且一旦更新DOM,您将再次必须更新数组,否则将无法恢复将存储对旧DOM对象的引用,这将使它更加低效
因此,请帮助我了解您认为哪种方法/想法是有效的,以及为什么?即使您维护一个DOM元素数组,Javascript在更新元素时仍然需要在DOM中搜索元素。我认为您通过创建来增加的复杂性是完全没有必要的。假设自定义数组方法更有效,也假设您将能够使此代码比浏览器开发人员在各自的浏览器中使Javascript引擎更有效。可能不安全。在数组中存储数据没有意义。只需使用强大的DOM处理框架,如jQuery,直接使用DOM即可 不需要维护额外的数组。大多数DOM检索方法都返回一个,它是DOM元素的一个活动集合,即当发生某些修改时,该集合总是更新的 因此,您可以:
var list_elements = yourlist.getElementsByTagName('li');
而list\u元素
将始终引用列表的所有li
后代
更新:当然,您也可以保留对yourlist
的引用,并使用访问li
元素
通过保留对该集合的引用,您可以节省额外的步骤,并在每次需要进行修改时检索元素
它也不会使用更多内存(我认为),因为您只保留对DOM元素(已经存在)的引用。删除节点时,该节点将自动从集合中删除,因此您不必担心保留对“死”DOM节点的引用。在重命名操作中-在文件列表中循环查找重复项…如果发现任何重复项,请提示用户选择其他名称,否则继续重命名。 当您拥有原始列表时,为什么还要再使用一个对象数组来循环,除非您希望维护原始文件列表数组以供其他用途