HTMl+SVG+JavaScript:在运行时更改文本
HTMl+SVG+JavaScript: change text at runtime?
我即将将一些基于Flash的应用程序迁移到HTML+JavaScript+SVG(单一目标渲染引擎是Webkit)。
我对SVG完全陌生,我想知道是否可以使用SVG作为模板图像来填充屏幕,并在HTML页面中嵌入的JavaScript代码中动态更改包含的文本。
我想做的是:在Inkscape中绘制页面的基本结构(带有一些图形和文本占位符),然后在HTML页面中显示SVG,并通过JavaScript填充文本占位符。
我可以通过在背景中显示静态SVG图像并在其上放置一些绝对定位的DIV来显示文本来获得相同的结果,但我想从Inkscape中设计文本标签的位置、大小和样式。
这能做到吗?怎样
我使用的是Prototype框架,而不是JQuery。
尝试jQuery。手动为SVG TextNode设置一个ID,然后尝试:
$("#my_id").textContent = "new Value";
也许它有效。否则,请尝试:
document.getElementById("my_id").textContent = "new Value";
如何访问SVG取决于如何将其包含在页面中。您可以使用object
或embed
元素并链接到SVG,也可以将其内联包含在页面中。请注意,通过img
元素包含它是不起作用的——SVG将被视为图像"黑盒",您将无法访问内部结构。
通过对象嵌入很简单,可以在所有支持SVG的浏览器中工作:
<object id="svg_object" width="672" height="243" data="myimage.svg" type="image/svg+xml">
No SVG support
</object>
然后要获得内部结构,您需要获得contentDocument
:
var svg = $('svg_object').contentDocument;
var svgel = svg.getElementById('myid');
请注意,在这种情况下,prototype.js不会自动扩展SVG的内部DOM,因此您将不得不求助于常规DOM方法。
如果您将页面作为application/xhtml+xml
提供,或者浏览器具有兼容HTML5的解析器(Firefox 4、Chrome、IE9,但不是Opera或更早版本的Firefox),则直接在页面中嵌入SVG将起作用。然而,现在您的prototype.js方法将直接使用SVG元素,使某些事情变得更加简单:
var svgel = $('myid');
我已经做了几个例子:对象,内联。它们在Firefox4中对我有效,你可能需要做一些麻烦来让它们在其他浏览器中工作(就支持而言,需要注意上述事项)。
SVG是一个基于XML的文档,您可以像处理XHTML文档一样使用javascript来处理它。
getElementById将像处理xhtml一样处理SVG,因此您可以动态更改SVG中的文本。
- 使用压缩的JavaScript文件(不是运行时压缩)
- 如何在运行时在angular 2中加载外部js脚本
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- http.listen()在运行时接受终端命令
- 自定义运行时Can'在谷歌应用引擎中看不到我的自定义日志
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- JavaScript运行时是如何工作的
- 在运行时更改表单标签文本
- 当我尝试添加文本效果时,有东西阻止了JavaScript的运行'手风琴'在html文档中
- 在运行时按搜索按钮突出显示文本
- 我想在运行时在 JSP 页面上插入富文本框
- 在文本更改时运行 JavaScript
- 如何获取html元素运行时代码以生成通用副本?就像复制文本框中输入文本一样
- 如何删除运行时使用jquery创建的文本框
- Javascript运行时错误:无法获取property 'style'动态创建的文本框的未定义引用或空
- IE javascript处理文本框时出现未知运行时错误
- 在运行时获取数据,例如从文本框获取数据
- 如何插入动态生成的运行时文本框的值
- HTMl+SVG+JavaScript:在运行时更改文本