【问题标题】:Accessing elements of embedded file访问嵌入文件的元素
【发布时间】:2012-08-14 09:59:08
【问题描述】:

我有一个通过我的 javascript 访问的 svg 文件。像这样

 this.m_svg = new Element('embed');
this.m_svg.setAttribute("src","img/gauge.svg"); 

我之前是内联 svg,所以我能够访问它的所有元素。但后来它(svg 图像)没有在 safari 上渲染。所以,我采用了这种方式。图像现在完美呈现,但是我不确定如何在 javascript 中访问 svg 文件的元素。可以给点建议吗?

在此处粘贴我的 svg 文件代码:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <g name="gauge" width="122px" height="127px">
        <image xlink:href="gauging.png" width="122" height="127"/>
    <circle id="led" cx="39" cy="76" r="5" style="fill: #999; stroke: none">
        <animateColor id="ledAnimation" attributeName="fill" attributeType="css" begin="0s" dur="1s"
        values="none;#f88;#f00;#f88;none;" repeatCount="0"/>
    </circle>
        <g id="needle" transform="rotate(0,62,62)">
            <circle cx="62" cy="62" r="4" style="fill: #c00; stroke: none"/>
            <rect transform="rotate(-130,62,62)" name="arrow"  x="58" y="38" width="8" height="24" style="fill: #c00; stroke: none"/>
            <polygon transform="rotate(-130,62,62)" points="58,39,66,39,62,30,58,39" style="fill: #c00; stroke: none"/>
        </g>
        <text id="value" x="51" y="98" focusable="false" editable="no" style="stroke:none; fill:#fff; font-family: monospace; font-size: 12px"></text>
    </g>
</svg>

我需要访问元素“needle”。

PS:我无法在 html 中添加任何内容。一切都必须在 javascript 端完成。

【问题讨论】:

  • 我认为你可以使用.getElementById()(当然是在加载之后),除了它需要使用命名空间的 DOM。
  • 我尝试使用这个 var needle_el = document.getElementById('needle');但它不识别针

标签: javascript svg web


【解决方案1】:

我创建了一个示例并将其推送到git repository。 我使用了您在 this question 中提供的 SVG 图像。 它运行良好,但有一个问题 - 来自img/gauge.png 的背景图像没有第二次加载。

所以目前的问题似乎已经回答了,但是关于 SVG 文件中的图像的问题仍然悬而未决。

解决方法是使用gauge.png 图像作为div 元素(这是object 元素的容器)的背景图像,并将其从SVG 中完全删除。

虽然我以后可能会再玩一次。

【讨论】:

  • 简洁的解决方案,但是我的应用程序现在还没有准备好移植到 jquery :( 而且我无法理解如何将您的代码转换为 javascript.. 就像您使用的 find 函数..只有那是谜,其余的我认为可以转换
  • 我使用 jQuery 只是为了节省时间。您可以重新编写它并使用XMLHttpRequestdocument.getElementById() 等。此外,如果您决定将 gauge.png 作为 div 的背景并将其从 .svg 文件中删除,您可以通过 AJAX 在 svg 加载时启动对象而不是设置属性,这会将一个请求保存到您的服务器。
  • 不幸的是,我无法采用使用 gauge.png 作为背景的优雅解决方案。从 javascript 访问 svg 的唯一目的是避免 html 的任何角色,否则我可以在 html 中创建一个对象,并且可以在 js 中检索 id。有什么办法,我可以在没有任何 html 角色的情况下访问元素。我相信应该有办法。如果我们可以通过 js 访问文件,那为什么不访问它的元素呢.. 对吧?
  • 老兄,谢谢百万分之一吨.. 明天将在我原来的系统上尝试这个第一件事(现在在家里).. :D 非常感谢你的帮助.. 真的 :D
猜你喜欢
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多