移动DOM元素的方法
Methods to Move DOM Element
我正在编写一个Javascript游戏,作为对象和AJAX的练习。它涉及到帆船围绕着一个航海主题的网格运动。尽管wessels是在一个对象数组中,但我需要操作它们的图形表示,即它们的精灵。目前,从DOM的角度来看,我选择在"td"元素中使用"img"元素。从UI连续性的角度来看,推荐使用Javascript以编程方式移动元素的方法:
(a)删除'from' cell (td元素)的内部HTML,重写'to' cell的内部HTML,
(b)克隆img节点(精灵),从父节点中删除原始节点,并将其附加到'to'单元格,或
(c)为精灵使用相对于table元素的定位,忽略所有td(尽管它们的背景[color]代表海洋深度)。
我肯定会坚持将精灵从一个单元格移动到另一个单元格,而不是对表格使用相对定位。我的理由是,表格单元格的大小可能因浏览器而异(在填充、边距等呈现方式上存在差异——特别是在恼人的IE中),并且计算精灵的确切位置以使其在给定单元格内对齐可能会变得复杂。
这就把你的选择范围缩小到(a)或(b)。这里我们去掉选项(a),因为从内部删除HTML并不是一种干净的操作DOM的方式。我喜欢将节点存储在对象中,然后将其附加到"to"单元格,然后删除原始节点的想法,这是选项(b)所建议的。这样,你仍然在处理高级"对象",而不是不必要的低级"文本"。你不需要弄乱文本——对于这样的应用程序,如果你不知道JavaScript已经提供的DOM操作函数,那么这将是一种肮脏的"黑客"方式。
我的答案是(b)。然而,如果你绝对需要速度——虽然我不知道你的游戏是否真的需要额外的提升——你可以考虑选项(a)。一些来源,如http://www.quirksmode.org/dom/innerhtml.html认为DOM操作方法通常比使用innerHTML慢。但这是所有事情的一般规律。层次越低,编写代码的速度就越快。级别越高,越容易理解和概念化代码,在我看来,由于速度在这种情况下不会产生很大的差异,因此保持简洁并使用(b)。
不需要克隆img节点,删除旧节点并追加克隆。只需将img节点附加到接收td。它将自动从它之前所在的td中移除。简单、有效、快捷。
- 用于检查数组中是否存在元素的javascript自定义方法
- 从数组中删除元素的最佳方法是:javascript/jquery
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 使用filter和map方法将数组中某些元素的第一个字母大写-JavaScript
- 任何一种简单的方法都可以将带有onload的元素作为目标
- 如何向Selectize元素添加渲染和创建方法
- 他们是如何使用angular/jqLite find()方法按属性名称和值选择元素的?ng conf 2015
- 在 JavaScript 数组中的所有元素之间穿插元素的简洁方法
- 列出没有 mysql 的元素的最佳方法是什么
- 使用Underscore.js修改json数组中所选元素的更有效方法
- 元素.appendChild()插入IE.变通方法?(与innerText与textContent相关)
- 选择具有值数组的所有元素的最有效方法
- 有什么方法可以在下一个元素上进行追加吗
- 使用javascript查找元素位置的最快方法
- 特定循环(html元素)方法的优点和缺点
- Javascript集:任何覆盖元素之间比较的方法
- 使用Ajax Get方法将数据显示到特定元素中
- 使用Javascript,获取元素的方法是什么,基于打开和关闭标记之间的文本
- javascript在html元素方法运行setTimeout后返回此消息
- 隐藏具有特定类$.each、for等的元素的有效方法