当前位置: 首页 > news >正文

做网站作业东营哪里做网站

做网站作业,东营哪里做网站,词爱站的关键词,做液压的公司网站为什么使用new DOMParser可以保持SVG命名空间#xff1a; 一、命名空间基础概念 1. XML命名空间定义 svg xmlnshttp://www.w3.org/2000/svg!-- 此元素及其子元素属于SVG命名空间 --rect x10 y20/ /svg…为什么使用new DOMParser可以保持SVG命名空间 一、命名空间基础概念 1. XML命名空间定义 svg xmlnshttp://www.w3.org/2000/svg!-- 此元素及其子元素属于SVG命名空间 --rect x10 y20/ /svgxmlns属性定义默认命名空间作用避免元素名称冲突 2. DOM中的命名空间表示 const svgElem document.createElementNS(http://www.w3.org/2000/svg, svg); console.log(svgElem.namespaceURI); // 输出: http://www.w3.org/2000/svg二、DOMParser的工作原理 1. 解析过程分析 const parser new DOMParser(); const doc parser.parseFromString(svgString, image/svgxml);关键步骤 根据MIME类型image/svgxml初始化解析器创建符合SVG规范的DOM树自动处理命名空间声明 2. 命名空间处理机制 #mermaid-svg-MlETWLWHWfcly45g {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MlETWLWHWfcly45g .error-icon{fill:#552222;}#mermaid-svg-MlETWLWHWfcly45g .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MlETWLWHWfcly45g .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-MlETWLWHWfcly45g .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MlETWLWHWfcly45g .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MlETWLWHWfcly45g .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MlETWLWHWfcly45g .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MlETWLWHWfcly45g .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MlETWLWHWfcly45g .marker.cross{stroke:#333333;}#mermaid-svg-MlETWLWHWfcly45g svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MlETWLWHWfcly45g .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-MlETWLWHWfcly45g text.actortspan{fill:black;stroke:none;}#mermaid-svg-MlETWLWHWfcly45g .actor-line{stroke:grey;}#mermaid-svg-MlETWLWHWfcly45g .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-MlETWLWHWfcly45g .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-MlETWLWHWfcly45g #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-MlETWLWHWfcly45g .sequenceNumber{fill:white;}#mermaid-svg-MlETWLWHWfcly45g #sequencenumber{fill:#333;}#mermaid-svg-MlETWLWHWfcly45g #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-MlETWLWHWfcly45g .messageText{fill:#333;stroke:#333;}#mermaid-svg-MlETWLWHWfcly45g .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-MlETWLWHWfcly45g .labelText,#mermaid-svg-MlETWLWHWfcly45g .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-MlETWLWHWfcly45g .loopText,#mermaid-svg-MlETWLWHWfcly45g .loopTexttspan{fill:black;stroke:none;}#mermaid-svg-MlETWLWHWfcly45g .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-MlETWLWHWfcly45g .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-MlETWLWHWfcly45g .noteText,#mermaid-svg-MlETWLWHWfcly45g .noteTexttspan{fill:black;stroke:none;}#mermaid-svg-MlETWLWHWfcly45g .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-MlETWLWHWfcly45g .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-MlETWLWHWfcly45g .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-MlETWLWHWfcly45g .actorPopupMenu{position:absolute;}#mermaid-svg-MlETWLWHWfcly45g .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-MlETWLWHWfcly45g .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-MlETWLWHWfcly45g .actor-man circle,#mermaid-svg-MlETWLWHWfcly45g line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-MlETWLWHWfcly45g :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} DOMParser Document 创建文档对象 设置文档类型为SVG 解析字符串时自动添加命名空间 返回带有正确命名空间的DOM树 DOMParser Document 三、对比不同解析方式 1. 错误方式innerHTML const div document.createElement(div); div.innerHTML svgrect x10//svg; const svg div.querySelector(svg); console.log(svg.namespaceURI); // 输出: null (HTML命名空间)问题 在HTML文档上下文中解析SVG元素被当作自定义HTML元素 2. 正确方式DOMParser const doc new DOMParser().parseFromString(svgrect x10//svg, image/svgxml ); const svg doc.documentElement; console.log(svg.namespaceURI); // 输出: http://www.w3.org/2000/svg优势 在独立文档中解析保留原始命名空间信息 四、命名空间保持的关键因素 1. MIME类型指定 // 正确指定MIME类型 parseFromString(content, image/svgxml)// 错误示例解析为HTML parseFromString(content, text/html)2. 文档类型创建 // DOMParser内部实现伪代码 function parseFromString(string, mimeType) {const doc createDocumentForType(mimeType);parseXML(string, doc);return doc; }当mimeType为image/svgxml时创建SVG规范的文档 3. 元素创建规则 // 解析器创建元素时的逻辑 function createElement(tagName) {if (currentNamespace SVG_NS) {return document.createElementNS(SVG_NS, tagName);}// ...其他命名空间处理 }五、实际案例分析 1. 保留命名空间的重要性 示例代码 // 使用DOMParser解析 const doc parser.parseFromString(svgforeignObject xmlnshttp://www.w3.org/1999/xhtmldiv//foreignObject/svg,image/svgxml );const div doc.querySelector(div); console.log(div.namespaceURI); // 输出: http://www.w3.org/1999/xhtml说明 foreignObject内的div保持XHTML命名空间样式和事件处理正常 2. 命名空间错误的影响 // 错误解析后的元素 const svg document.createElement(svg); const rect document.createElement(rect); svg.appendChild(rect);console.log(rect.namespaceURI); // 输出: null rect.setAttribute(x, 10); // 属性可能无法生效后果 CSS选择器失效无法匹配SVG元素部分属性无法被正确解析动画和交互功能异常 六、源码级解析以Chromium为例 1. DOMParser实现 源码位置third_party/blink/renderer/core/xml/dom_parser.cc 关键代码段 Document* DOMParser::parseFromString(const String str,const String type) {// 根据MIME类型创建文档Document* doc CreateDocument(type,GetExecutionContext(),EnsureParserCreated(GetExecutionContext()-GetSecurityOrigin()));// 解析内容doc-SetContent(str);return doc; }2. SVG文档创建 源码位置third_party/blink/renderer/core/xml/document_init.cc DocumentInit DocumentInit::Create() {if (MIMETypeRegistry::IsSVGMIMEType(mime_type)) {return DocumentInit::CreateSVG();}// ...其他类型处理 }七、总结 为什么processSVG函数通过DOMParser可以保持命名空间 专用文档上下文 DOMParser根据image/svgxml MIME类型创建符合SVG规范的文档环境 元素创建规则 在解析过程中自动使用createElementNS创建元素 命名空间继承机制 子元素自动继承父元素的命名空间 属性处理一致性 保留原始属性中的命名空间声明如xlink:href 标准化解析流程 遵循XML解析规范正确处理命名空间前缀 关键优势 确保SVG元素被正确识别保留所有命名空间相关功能如XLink引用兼容各种SVG查看器和编辑器 验证方法 const doc new DOMParser().parseFromString(svg xmlnshttp://www.w3.org/2000/svg/svg,image/svgxml ); console.log(doc.documentElement.namespaceURI); // 输出: http://www.w3.org/2000/svg附录一、DOMParser 保持命名空间的核心机制 1. MIME 类型驱动解析 // 关键代码 const doc new DOMParser().parseFromString(svgString, image/svgxml);MIME 类型识别image/svgxml 明确告知解析器处理 SVG 内容文档类型创建生成符合 SVG 规范的 XML 文档对象 2. 命名空间自动继承 !-- 解析后的 DOM 结构 -- svg xmlnshttp://www.w3.org/2000/svgrect x10 y20/ !-- 自动继承 SVG 命名空间 -- /svg3. 元素创建规则 解析器内部使用 createElementNS 方法 // 伪代码实现 function createElement(tagName) {return document.createElementNS(http://www.w3.org/2000/svg, tagName); }二、命名空间保持验证 1. 元素级验证 const svg doc.documentElement; console.log(svg.namespaceURI); // 输出http://www.w3.org/2000/svgconst rect doc.querySelector(rect); console.log(rect.namespaceURI); // 输出http://www.w3.org/2000/svg2. 属性级验证 const useElem doc.querySelector(use); console.log(useElem.getAttributeNS(http://www.w3.org/1999/xlink, href )); // 正确获取 xlink:href 属性三、与其他解析方式的对比 解析方式命名空间保持元素识别适用场景innerHTML❌作为普通元素简单HTML片段createElementNS✅准确识别动态创建元素DOMParser✅准确识别完整文档解析XMLSerializer✅序列化保留文档转换输出 四、实现原理图示 #mermaid-svg-XXeFDbXfHZ3GAfZA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XXeFDbXfHZ3GAfZA .error-icon{fill:#552222;}#mermaid-svg-XXeFDbXfHZ3GAfZA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XXeFDbXfHZ3GAfZA .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-XXeFDbXfHZ3GAfZA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XXeFDbXfHZ3GAfZA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XXeFDbXfHZ3GAfZA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XXeFDbXfHZ3GAfZA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XXeFDbXfHZ3GAfZA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XXeFDbXfHZ3GAfZA .marker.cross{stroke:#333333;}#mermaid-svg-XXeFDbXfHZ3GAfZA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XXeFDbXfHZ3GAfZA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-XXeFDbXfHZ3GAfZA .cluster-label text{fill:#333;}#mermaid-svg-XXeFDbXfHZ3GAfZA .cluster-label span{color:#333;}#mermaid-svg-XXeFDbXfHZ3GAfZA .label text,#mermaid-svg-XXeFDbXfHZ3GAfZA span{fill:#333;color:#333;}#mermaid-svg-XXeFDbXfHZ3GAfZA .node rect,#mermaid-svg-XXeFDbXfHZ3GAfZA .node circle,#mermaid-svg-XXeFDbXfHZ3GAfZA .node ellipse,#mermaid-svg-XXeFDbXfHZ3GAfZA .node polygon,#mermaid-svg-XXeFDbXfHZ3GAfZA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XXeFDbXfHZ3GAfZA .node .label{text-align:center;}#mermaid-svg-XXeFDbXfHZ3GAfZA .node.clickable{cursor:pointer;}#mermaid-svg-XXeFDbXfHZ3GAfZA .arrowheadPath{fill:#333333;}#mermaid-svg-XXeFDbXfHZ3GAfZA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-XXeFDbXfHZ3GAfZA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-XXeFDbXfHZ3GAfZA .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-XXeFDbXfHZ3GAfZA .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-XXeFDbXfHZ3GAfZA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-XXeFDbXfHZ3GAfZA .cluster text{fill:#333;}#mermaid-svg-XXeFDbXfHZ3GAfZA .cluster span{color:#333;}#mermaid-svg-XXeFDbXfHZ3GAfZA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-XXeFDbXfHZ3GAfZA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 根据MIME类型 使用createElementNS 原始SVG字符串 DOMParser解析 创建SVG文档对象 解析元素 创建SVG元素 保留命名空间属性 生成完整DOM树 五、关键优势总结 精准元素识别浏览器正确渲染SVG元素属性完整性保留xlink:href等命名空间属性样式兼容CSS选择器正确匹配脚本操作可靠DOM API可正常操作元素数据交换无损序列化后保持原始结构 六、代码验证示例 script function testNamespace() {const svgString svg xmlnshttp://www.w3.org/2000/svg xmlns:xlinkhttp://www.w3.org/1999/xlinkuse xlink:href#icon//svg;// 使用DOMParser解析const doc new DOMParser().parseFromString(svgString, image/svgxml);const useElem doc.querySelector(use);// 验证命名空间console.log(SVG命名空间:, doc.documentElement.namespaceURI http://www.w3.org/2000/svg);// 验证跨命名空间属性console.log(XLink属性读取:,useElem.getAttributeNS(http://www.w3.org/1999/xlink, href) #icon); }testNamespace(); // 输出: true, true /script结论DOMParser 通过 MIME 类型识别、命名空间感知的元素创建和属性处理机制确保 SVG 文档的命名空间完整性这是其他解析方式无法替代的核心优势。
http://www.w-s-a.com/news/926086/

相关文章:

  • 网站建设马鞍山怎么建立局域网网站
  • 开源 网站开发框架哪些网站可以做图片链接
  • 大良制作网站网站设计的能力要求
  • 前端设计除了做网站还能做什么江苏高校品牌专业建设工程网站
  • 做二手房产网站多少钱用户权限配置wordpress
  • 做亚马逊网站需要租办公室吗小型企业网站模板
  • 网站全屏视频怎么做个人公司注册网上申请
  • 如何k掉别人的网站搜索引擎优化与关键词的关系
  • 百度推广 网站吸引力做网站开发的薪酬怎么样
  • js网站开发工具软件营销方案
  • 做网站的天空网云南省建设厅网站怎么进不去
  • 天津网站排名提升网络营销推广策略包括哪些
  • 网站建设与管理 ppt网站打开是别人的
  • 图片网站怎么做排名怎么分析一个网站seo
  • 伪原创对网站的影响深圳装修公司排名100强
  • 网站建设公司效果个人可以做医疗信息网站吗
  • 网站使用arial字体下载微网站 建设
  • 文化馆网站建设意义营销型国外网站
  • 公司网站定位建议wordpress怎么用模板
  • 中国十大热门网站排名计算机选什么专业最好
  • 怀化建设企业网站太原网站关键词排名
  • 空间注册网站网站制作是怎么做的
  • 数码家电商城网站源码一个网站的成本
  • 网站伪静态是什么意思麻涌东莞网站建设
  • 理县网站建设公司郑州仿站定制模板建站
  • 手机网站建设网站报价诸城人才网招聘网
  • 一起做网站怎么下单临沂网站制作
  • 公司网站案例企业网站 模版
  • 做的好的响应式网站有哪些网站界面设计案例
  • 上海创意型网站建设icp备案网站信息