【问题标题】:Move or clone an svg from lower div to top div将 svg 从较低的 div 移动或克隆到顶部 div
【发布时间】:2019-03-20 17:10:58
【问题描述】:

试图将一个 div 从 chart_div 移动到 movehere div。

我可以将它复制到当前 svg 之下(注释代码)。 我也可以克隆它,但没有简单的方法专门针对标题行。该 svg 中的“g”元素。

html

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script><div id="movehere"><div id="chart_div"></div></div>

javascript

function afterDraw() {
    var g = document.getElementsByTagName("svg")[0].getElementsByTagName("g")[1];
    document.getElementsByTagName("svg")[0].parentNode.style.top = '40px';
    document.getElementsByTagName("svg")[0].style.overflow = 'visible';
    var height = Number(g.getElementsByTagName("text")[0].getAttribute('y')) + 15;
    g.setAttribute('transform','translate(0,-'+height+')');
  g.setAttribute('transform','translate(0,-'+height+')');

  //var NewG=g.cloneNode(true)
 // var move="translate("+0+","+50+")"
//  NewG.setAttributeNS(null,"transform",move)
//  g.appendChild(NewG)

   $('#chart_div svg').clone().appendTo($('#movehere'))
    g = null;
  }

这是一个例子: https://codepen.io/anon/pen/jJzxzj

谢谢!

【问题讨论】:

  • 请添加您的 HTML 代码
  • 当我取消注释 //$('.chart-div svg').clone()… 时,一切似乎都在工作。
  • @AndyHoffman 我不知道您的建议是如何工作的,因为该行中使用了错误的选择器。 $('.chart-div svg').clone().appendTo($('.movehere')); 应该是 $('#chart_div svg').clone().appendTo($('#movehere')); 选择器应该定位 ID # 而不是 Class .chart-div 应该是 chart_div
  • @AndyHoffman 感谢您指出这一点。我已经尝试了一些东西并忘记更新它。所以克隆有点工作。除了我不能只针对标题行。目前整个 svg 都被克隆了。
  • @NewToJs 感谢您的建议。是的,但是我如何定位该 svg(标题行)中的特定“g”元素?

标签: javascript jquery html css svg


【解决方案1】:

看看这支笔:https://codepen.io/jormaturkenburg-the-typescripter/pen/QoVzBq

  • 我在笔中清理了您的 HTML。
  • 暂时将 CSS 注释掉。
  • 添加了一个 SVG 元素以将 g(组)移动到,您不能将 SVG 放在 DIV 你只能把它放在一个 SVG 元素中。
  • 为 g 添加了转换,因为该组中的元素使用绝对坐标定位,并且绘制得非常低,因此在较小的 SVG 元素中不可见。
    // The g you want has no id or class attached so selecting with
    // jQuery's n-th child selector was the easiest way to get it
    let group = $("#chart_div svg g:nth-child(3)");
    // Like I mention in my answer you need to attach the g to an SVG element, which I added to your div
    let targetSVG = $("#movehere svg");
    // To show the text you need to translate the group up by about 400 px
    group.clone().attr('transform', `translate(0 -400)`).appendTo(targetSVG);

【讨论】:

  • 谢谢!如何检查 svg 对象中孩子的 id?除了将它克隆到 div 之外,我可能需要对 name 列执行相同的操作。
  • 检查源。现在右键单击对象并单击检查通常是您所做的,但它在图表上被禁用,因此您必须手动挖掘源...
猜你喜欢
  • 2014-05-22
  • 1970-01-01
  • 2012-06-01
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 2013-10-09
相关资源
最近更新 更多