【问题标题】:Use javascript to draw a single DOM element in two places使用javascript在两个地方绘制单个DOM元素
【发布时间】:2012-07-26 16:16:06
【问题描述】:

我正在使用 jQueryUI 创建一个大的可排序卡片表,每个卡片都由一个嵌套的 div 标签树组成,并使用 CSS 进行样式设置。当我在某些条件下拖动卡片时,我想创建一个稍微透明的卡片“克隆”,在拖动时悬停在“真实”卡片的右侧,但我不想实际复制所有 HTML为了完成这种视觉效果。

那么,是否可以使用 javascript 在网页上的两个不同位置绘制相同的 DOM 元素,而无需实际复制 HTML?

感谢任何回答的人。

【问题讨论】:

  • 完全相同的元素不可能同时出现在两个地方。不过,可以克隆该元素。也有可能使用after:before: 等伪选择器创建shadow dom,以获得无需任何html 的图形效果。
  • 您所做的是使用clone 并添加几个类。
  • 感谢 cmets,伙计们。如果 Esailija 是对的,那么我想我会尝试实现你的想法,zzzzBov。我只是想知道是否有一种简单的方法可以在不克隆整张卡片的情况下实现此效果。
  • 因为我不能再编辑我的评论了,这里有一个影子 dom 的例子:cssarrowplease.com div 中的箭头根本不是 html。
  • 有趣...我以前确实使用过它,但不明白它是如何工作的。

标签: javascript jquery html jquery-ui


【解决方案1】:

每个 DOM 元素要么根本不连接到 DOM,要么连接到一个特定的父级。您不能在两个不同的地方显示相同的元素。附加到新父级只会从旧父级移动元素。

您可以使用cloneNode(注意附加新的事件处理程序,因为它们不是克隆的)或在 JS 工厂生成一些“模板”元素并将每个元素附加到不同的父级。

【讨论】:

  • 具有 true 传递的 jQuery 克隆将复制元素和事件处理程序。见:docs.jquery.com/Clone
  • @jholloman,你确定它会克隆使用常规 DOM 的.addEventListener 添加的处理程序吗?我知道没有允许枚举当前安装的事件的 DOM 函数,所以有些事情告诉我 jQuery 只能克隆 .on* 属性处理程序和那些通过 jQuery 本身安装的处理程序。
  • 这是一个好点,我不知道它是否可以克隆到那个级别。
猜你喜欢
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 2011-10-15
相关资源
最近更新 更多