Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 哪条路更好?在对象数组中存储DOM对象还是直接进行DOM操作?_Javascript_Performance_Dom - Fatal编程技术网

Javascript 哪条路更好?在对象数组中存储DOM对象还是直接进行DOM操作?

Javascript 哪条路更好?在对象数组中存储DOM对象还是直接进行DOM操作?,javascript,performance,dom,Javascript,Performance,Dom,标题可能不太清楚,但让我解释一下我所说的“哪种方式更好?将DOM对象存储在对象数组中还是直接进行DOM操作?” 我有一个DOM对象列表供解释: <ul> <li></li> ... </ul> ... lis是动态的,根据某些操作进行更新 我们的要求是,检查列表是否已经包含了与新文本相同的元素,例如,考虑一个文件列表并重命名一个节点,如果该名称已经存在,删除包含相同文本的所有DOM对象并生成最新的一个(希望这是非常清楚的)。 现在

标题可能不太清楚,但让我解释一下我所说的“哪种方式更好?将DOM对象存储在对象数组中还是直接进行DOM操作?”

我有一个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节点的引用。

在重命名操作中-在文件列表中循环查找重复项…如果发现任何重复项,请提示用户选择其他名称,否则继续重命名。 当您拥有原始列表时,为什么还要再使用一个对象数组来循环,除非您希望维护原始文件列表数组以供其他用途