javascript - 根据请求数据动态创建 SVG

标签 javascript html svg

我尝试过谷歌搜索,但是 html 中关于 svg 的信息非常困惑。我有一个非常复杂的场景,或者至少对我来说是这样的:

使用 jQuery,我不想根据 GET 请求的响应数据在 div (id="manual-regridding-image") 内动态创建 svg 对象。 svg 将包含图像数据和其他 svg 元素。如果 GET 请求失败,则 div 的全部内容应设置为失败函数内的消息。最后,需要在图像完全下载/加载后做出向用户显示内容的决定。

到目前为止我得到的是:

function load_grid_svg() {

    show_gridimage = true;
    $.get(
        "/api/results/gridding/svg",
        function (data) {
            svg = document.importNode(data, true);
            $("#manual-regridding-image").html(svg);
        }
    ).fail(function() {
        $("#manual-regridding-image").html("<em>Could not find the grid image! Maybe gridding failed last time?</em>");
    }).always(function() {
        if (show_gridimage) {
            $("#manual-regridding-image").show();
        } else {
            $("#manual-regridding-image").hide();
        }
    });
}

但是数据导入不起作用。感觉这个问题以前就应该问过,但我找不到任何适用的内容。

编辑

如果我正确理解回溯,这会在 importNode 行上产生 NotSupportedError:不支持操作

编辑2

正如评论中的 @Tomalak 所指出的,响应是一个 XMLDocument 并且要让它在 $.get 中正确显示回调应该是:

    function (data) {
        $("#manual-regridding-image").append(data.documentElement);
    }

最佳答案

根本不知道为什么需要 document.importNode
您只需使用 $.html() 将 svg 的内容添加到文档中即可。

检查这个例子:

svgstr = '<svg height="100" width="100"><circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" /></svg>'

$('#btn1').click(function() {
  $('#a1').append(svgstr)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="a1">
  <span>Some Text</span><br />
</div>
<button id="btn1">Click to add SVG</button>

关于javascript - 根据请求数据动态创建 SVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39333388/

相关文章:

javascript - 触发点击事件时选择父项?

javascript - 如何在我的js数据文件更改时刷新页面

html - 如何修复 SVG 顶部和左侧笔划截断?

javascript - 如何仅在 react 文档的特定字段发生变化时才运行跟踪器计算?

javascript - 数据绑定(bind)到 Polymer 中的动态路径

settimeout 后无法访问 JavaScript 函数

HTML: <ul> 标签位于 div 区域的边缘

jquery - 使用 jQuery/HTML5 聚焦光效

css - 未加载自定义图标字体

python - pySVG CSS 链接