【问题标题】:Getting [object SVGSVGElement] instead of SVG获取 [object SVGSVGElement] 而不是 SVG
【发布时间】:2020-07-31 18:54:29
【问题描述】:

我的 HTML 页面底部有一个“组”SVG,隐藏。我正在尝试根据对象键有条件地使用它们。例如,我有:

<svg id="fiftyOne" width="100%" height="100%" viewBox="0 0 2863 871" ...../></svg>

我想有条件地调用 #fiftyOne 作为这个 Javascript 模板中的 svg 标志:

const refreshView = (dataSet) => {
    output.innerHTML = "";
    dataSet.forEach((p) => {
      output.innerHTML += `
        
        <div class="card pickup-result" data-output="${p.output}" data-tone="${p.tone}">
        <div class="card-body">
          <div class="card-heading">
            <h4>${p.name}</h4>${p.svg}   <// Call the SVG here.
          </div>
          <hr>
         
          <h5>Specs:</h5>
          <p><strong>Output: </strong> ${p.output}</p>
          <p><strong>Description:</strong> ${p.description}</p>
  
          <div class="pickup-info">
          <a class="link-button" target="blank" href="${p.url}">See Product</a>
           
          </div>
        </div>
        
        </div>
        `;
    });

但是我得到了渲染的卡片,带有[object SVGSVGElement],而不是渲染的 SVG。我做错了吗?


更新:

使用p.svg.outerHTML 可以用正确的信息填充HTML。我面临的下一个问题是 SVG 不会显示在实际卡上,即使数据在那里。见截图:

有什么想法吗?这是第一次使用 SVG。

【问题讨论】:

    标签: javascript html svg


    【解决方案1】:

    您正在将实时 SVG 元素而不是其源代码放入代码中。

    您可以输出p.svg.outerHTML 而不仅仅是p.svg


    或者,如果您想包含该实际元素而不是它的副本,则必须在完全呈现 HTML 之后插入该元素(而不是在每次迭代之后,因为每次将 innerHTML 设置为 all 时元素引用都会失效内容被重构):

    const headers = Array.from(output.querySelectorAll('.card-heading'))
    dataSet.forEach((p, index) => headers[index].appendChild(p.svg))
    

    【讨论】:

    • 谢谢。我现在正在获取 HTML,但由于某种原因,它在我的 Firefox 开发工具中“变灰”。没有应用任何样式。这与我采用的方法与您推荐的方法有关吗?
    • 我不确定你指的是什么,没有应用样式...
    • 抱歉 - 在 Firefox 上,灰色的 HTML 通常意味着有display: none; 应用于元素。 SVG 和路径只是简单地变灰,它不会显示在卡本身上。有什么想法吗?
    • 检查计算的样式,看看其他地方是否有任何 CSS 导致它被隐藏...
    • 没关系,因为&lt;symbol&gt; is a template for later use,它本身没有任何视觉表示。也许你以错误的方式处理了整个事情——也许你应该在一个地方永久输出你需要的所有模板 SVG,而当你构建你的卡片时,你只需要&lt;svg&gt;&lt;use xlink:href="#theRelevantSymbolIdHere"/&gt;&lt;/svg&gt;?但是,如果你有更多问题,请打开一个新问题,因为这个问题是关于如何首先插入 SVG,这个问题已经解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多