Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在“节点”上执行“appendChild”失败:仅允许文档上的一个元素

在“节点”上执行“appendChild”失败:仅允许文档上的一个元素
EN

Stack Overflow用户
提问于 2016-12-23 06:58:23
回答 2查看 51.3K关注 0票数 57

我正在尝试加载一个外部svg文件,然后在其之上编写额外的SVG元素。当我这样做时,我会得到以下错误

在“节点”上执行“appendChild”失败:仅允许文档上的一个元素

当我在铬里面检查的时候。

下面是HTML:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="css/index.css">
    <title>Hello World</title>
  </head>
  <body>
      <svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="mySvg">
        <circle cx="40" cy="30" r="15" fill="#FF00FF"
          stroke="#000000" stroke-width="2" />
      </svg>
      <object data="img/drawing.svg" type="image/svg+xml"
        align="center" id="svgDrw" height="80vh"></object>
    <script type="text/javascript" src="js/problem.js"></script>
  </body>
</html>

这里是problem.js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var svgXtraDoc;
var d = document.getElementById("svgDrw");

d.addEventListener("load",function(){

  // get the inner DOM 
  svgXtraDoc = d.contentDocument;
  // get the inner element by id
  svgRect1 = svgXtraDoc.getElementById("MyRect1");
  svgRect2 = svgXtraDoc.getElementById("MyRect2");
}, false);


function addRect() {
  var svgRect = document.createElementNS("http://www.w3.org/2000/svg", 
    "rect");
  svgRect.setAttribute("x", 100);
  svgRect.setAttribute("y", 100);
  svgRect.setAttribute("width", 100);
  svgRect.setAttribute("height", 100);
  svgRect.style.fill = "red";
  // mySvg.appendChild(svgRect);
  svgXtraDoc.appendChild(svgRect);
}

document.getElementById("mySvg").addEventListener("click", addRect);

..。这里是drawing.svg,去掉了一些Inkscapy巡洋舰:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   width="29.02857mm"
   height="37.092064mm"
   viewBox="0 0 102.85714 131.42857"
   id="svg2"
   version="1.1">
  <g
     id="layer1"
     transform="translate(-205.71428,-218.07649)">
    <rect
       style="stroke:none;fill-opacity:1;fill:#5eb056"
       id="MyRect1"
       width="102.85714"
       height="131.42857"
       x="205.71428"
       y="218.07649" />
    <rect
       style="fill:#000000;stroke:none;fill-opacity:1"
       id="MyRect2"
       width="42.857143"
       height="65.714287"
       x="231.42857"
       y="252.3622" />
  </g>
</svg>

当您单击圆圈时会出现错误:应该出现在两个矩形导入绘图中的矩形没有出现,并且错误消息“未能在‘Node’上执行'appendChild‘:仅允许文档上的一个元素”。显示在控制台中。

如果我将此更改为将矩形添加到包含圆圈的svg中,即取消注释行"// mySvg.appendChild(svgRect);",则该矩形将成功显示。

我还知道绘图文件正在成功加载,因为在其他代码中(出于简洁的原因,此处不包括),我可以更改该文件中矩形的颜色。因此,我似乎可以访问文件中的现有元素,但不能添加元素。

关于外部加载的SVG还是内联的SVG,我没有考虑到吗?

最后一件事--这是进入Cordova应用程序,所以我想保持它的小,所以纯JavaScript解决方案是首选的。如果有必要的话,我将使用JQuery或SnapSVG,但似乎我的需求非常简单,没有外部库应该可以做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-23 11:26:37

文档的根节点与文档元素之间存在差异。您需要的是<svg>文档元素,但.contentDocument为您获取根节点。

根节点是更高一级的层次结构。这意味着<svg>文档元素驻留在根节点中,根节点可能只有一个<svg>子元素。

要获得文档元素,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
svgXtraDoc = d.contentDocument.documentElement;
票数 23
EN

Stack Overflow用户

发布于 2018-02-22 14:50:47

在我的例子中,DOM抱怨是因为我试图在文档本身的中添加一个子元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
document.appendChild(myElement);

我通过获取到body标记的引用来解决这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
document.body.appendChild(logger);
票数 163
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41303634

复制
相关文章
PushPlugin-为iOS的Hybird App提供APNS服务
APNS是iOS生态下面的推送机制。其原理是APP启动的时候,向苹果注册,并获得一个唯一token,然后不论app是否继续在运行,都可以通过调用苹果的APNS服务,来向持有token的设备推送消息,例如顶部的通知。
libo1106
2018/08/08
5460
java 生成本地ssl安全证书 springboot配置
SSL(Secure Sockets Layer 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密,SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。SSL协议分为两层,SSL记录协议建立在TCP之上,为高层协议提供数据封装、压缩、加密等基本功能支持。SSL握手协议建立在SSL记录协议之上,用户实际数据传输开始前进行身份验证、协商加密算法、交换加密秘钥。
用户5899361
2020/12/07
2.6K0
java 生成本地ssl安全证书 springboot配置
生成本地CA根证书、p12流程
安装 OpenSSL:首先,确保你的系统上安装了 OpenSSL 工具。如果尚未安装,你可以通过 Homebrew 或从 OpenSSL 官方网站下载并安装。
Raindew
2023/10/14
1.4K0
生成本地CA根证书、p12流程 EC篇
上述命令将生成一个 EC 私钥文件 root.key,使用 prime256v1 曲线参数。
Raindew
2023/10/14
7990
CA证书(数字证书的原理)
加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。加密过程需要用到公钥。
Centy Zhao
2019/12/26
9.8K3
SAP关于标准成本、计划成本、目标成本、实际成本
(1)标准成本=标准价*标准量即根据物料主数据上的标准价S*BOM上的物料数量等到标准价,一般来讲我们是通过T-codeCK24发布出来,即我们在物料主数据成本视图2看到的就是标准价。 (2)目标成本=标准价*实际量,标准价同(1),实际量的来源于T-codeCO11N的报工后的工时得到。所以如果你的目标成本有误,一定要去查一下是否没有报工。 (3)实际成本=实际价格*实际量,因为你是采用标准价,所以出入库都是标准价格,系统本身并没有实际价格,但是在CO88结算后会结算出产品差异,即标准价+差异=实际价格。
SAP最佳业务实践
2018/03/27
3.2K0
app store/ios开发证书、发布证书、推送证书的快捷制作
文章目录 前言 一、下载安装AppUploader工具 二、使用方法 1.中英文切换 2.证书制作 总结 前言 本文提供给那些无苹果电脑情况下想要快速制作ios证书的人群
iOS程序应用
2023/04/17
8470
app store/ios开发证书、发布证书、推送证书的快捷制作
根证书和中间证书的区别
让我们花几分钟时间讨论一下中间证书和根CA证书。SSL(或者更准确地说,TLS)是一项大多数终端用户知之甚少甚至一无所知的技术。即使是获取了SSL证书的人通常也只知道他们需要SSL证书,而且他们必须在服务器上安装SSL证书,才能通过HTTPS为网站提供服务。当提到中间证书和CAs、根证书和CAs时,大多数人的目光开始变得呆滞。
亚洲诚信SSL
2019/07/05
12.9K0
根证书和中间证书的区别
EV证书:级别最高的SSL证书
在当今数字化时代,保护网站和用户数据的安全应该是网站最重要的功能。EV(Extended Validation)证书是一种高级别的SSL证书,提供了更强的身份验证和在线安全保障。
稀糊牛肉粥
2023/10/18
4720
成本=固定成本+可变成本_可避免固定成本是机会成本吗
半可变(或半固定)成本:有些成本费用属于半可变成本,如不能熄灭的工业炉的燃料费等。
全栈程序员站长
2022/11/01
1.2K0
谈谈企业的成本
第一,我们了解经济学里的机会成本。机会成本就是你现在在A事情,但如果不做A,你可以做B这件事。那么对于A而言,B就是你的成本。你可能有很多机会,但成本有限,你只能选择做一个。比如说理财,你不要觉得不亏就行。对于机会成本来说,定期的理财收益就是你的机会成本。
石云升
2022/08/25
3680
iOS开发证书发布证书,推送证书,描述文件的生成总集
1.进入(Launchpad),找到   (我的是在其他里面找到的),运行后再左上角
爱学iOS的小麦子
2023/05/09
2920
Dropbox的成本估算
这个数字令人印象深刻,因为一年半前,它的用户总数已经是300万了。短短18个月,在一个这样大的基数上,继续扩张八倍多,真可谓势头惊人。
ruanyf
2018/09/21
4.2K1
Dropbox的成本估算
iOS开发证书发布证书,推送证书,描述文件的生成总集(一)
1.进入(Launchpad),找到 (我的是在其他里面找到的),运行后再左上角   2.存储在桌面就好了,然后就完成退出钥匙串工具就可以了。
iOS程序应用
2023/04/17
2780
【信管6.1】成本与成本规划
项目成本管理就是要确保在批准的预算内完成项目。虽然项目成本管理主要关心的是完成项目活动所需资源的成本,但也必须考虑项目决策对项目产品、服务或成果的使用成本的影响。总之,项目成本管理是项目管理铁三角的最后一个支点,在项目管理中占有非常重要的地位。
硬核项目经理
2023/03/02
5560
【信管6.1】成本与成本规划
iOS证书申请_安装证书
苹果的证书繁锁复杂,制作管理相当麻烦,今天决定重置一个游戏项目中的所有证书,做了这么多次还是感觉很纠结,索性直接记录下来,日后你我他查阅都方便;
全栈程序员站长
2022/09/20
2.5K0
iOS证书申请_安装证书
iOS开发证书发布证书,推送证书,描述文件的生成总集(一)​
1.进入(Launchpad),找到 (我的是在其他里面找到的),运行后再左上角​
iOS程序应用
2022/12/06
3320
jks证书转pem证书
用管理员权限打开一个cmd框,找到jdk的bin目录,然后执行如下命令:(请自行将jks文件拷贝至此)
华创信息技术
2019/12/18
6.6K0
缓存的收益和成本
通常情况下,我们在设计程序的时候,会在客户端和存储层之间加入缓存层(例如redis和memcache)。存储层一般用来持久化数据,而缓存层则是为了更快的返回所需要的的数据结果。
AsiaYe
2020/07/16
8560
缓存的收益和成本
通配符证书和单域名SSL证书的区别
  通配符证书和单域名SSL证书有什么区别?首先,我们先来了解通配符证书和单域名SSL证书的定义:
安信SSL证书
2019/07/31
5.6K0
通配符证书和单域名SSL证书的区别

相似问题

更改PushNotification的设置

10

AWS SSL证书与GoDaddy的成本

142

离子PushNotification

13

托管身份-是否节省了证书成本?

17

PushNotification警报标题

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文