更改 use 元素上的 defs 中定义的属性

2024-03-13

如何通过脚本来更改 defs 中定义的“use element”的样式?我试图进入 w3c 工作草案界面,但我迷失在那个迷宫中

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns="http://www.w3.org/2000/svg"
   version="1.1"
   width="100"
   height="100"
   id="svg1">

<defs>
   <g id="minchia" onclick="color(evt)">
     <rect width="50" height="50" style="fill:#ffff6e;stroke:#ee1400;stroke-width:3" />
   </g>
</defs>       

<script type="text/javascript"> 
<![CDATA[ 
function color(evt)
{   
    node = evt.target.correspondingUseElement;

    alert(node.getAttributeNS(null, "style"));   /* empty! */
    alert(node.getAttributeNS("http://www.w3.org/1999/xlink", "style"));   /* empty! */

    node.setAttributeNS("http://www.w3.org/1999/xlink", "fill", "blue");    /* nothing */
    node.setAttributeNS(null, "fill", "blue");  /* nothing */
}
]]> 
</script>

<use xlink:href="#minchia" id="frufru" x="10" y="10"  />       
</svg>

Update

还有一件事:如果引用的元素是包含 2 个其他元素(如矩形和文本)的“g”怎么办?如何设置正确的 childNode 的属性(当然是通过 DOM 方法)? 在此示例中,setAttribute 设置引用元素的第一个子元素的样式。如果我必须设计第二个样式怎么办?

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<svg
  xmlns:svg="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  xmlns="http://www.w3.org/2000/svg"
  version="1.1"
  width="1000"
  height="1000"
  id="svg1">

<defs>
  <g id="test" onclick="color(evt)" >
 <rect
   width="54"
   height="58"
   x="1.5"
   y="1.5"
   id="rect5" />
<text
   x="-34"
   y="47"
   transform="matrix(0.66777386,-0.74436421,0.74436421,0.66777386,0,0)"
   id="text2987"
   style="font-size:30px;fill:#ffffff;stroke-width:0px">JC!</text>
 </g>
</defs>       

<script type="text/javascript"> 
<![CDATA[ 
function color(evt)
{   
node = evt.target.correspondingUseElement;
    node.setAttributeNS(null, "style", "fill:blue");    
}
]]> 
</script>

<use xlink:href="#test" id="frufru" x="10" y="10" style="fill:#000000" />       

</svg>

正如你所看到的我的测试页 http://phrogz.net/svg/use_style_precedence.xhtml,如果您定义内部元素的视觉样式<defs>文档的一部分,您不能覆盖该样式<use>例如,不通过视觉属性,style属性,或应用于<use>.

此外,您不能在<use>将样式级联到源元素的元素;为此,您必须使用 CSS 样式。

你必须:

  1. 确保您定义的元素没有应用视觉样式,并且
  2. 使用 CSS 或设置手动解析或创建style属性,例如

    node.setAttribute('style','fill:blue');
    

As 此处注明 https://stackoverflow.com/questions/4882890/svg-in-xhtml5-setting-attributes-with-proper-namespace你可以使用setAttribute(...) or setAttributeNS(null,...)对于 SVG 属性。

Update: 回答你的第二个问题:

如果引用的元素是包含 2 个其他元素(如矩形和文本)的“g”怎么办?

您不能使用 CSS 规则来选择 a 的伪子级<use>;它们根本不存在。但是,您可以做的是应用您想要在内部保留的不变样式<def>然后应用style你想要在<use>.

例如:

<defs>
  <g id="foo">
    <!-- Every rect instance should be filled with blue -->
    <rect width="54" height="58" x="1.5" y="1.5"
          fill="blue" />
    <!-- I want to be able to change text color per use
         so I must be sure not to specify the fill style -->
    <text x="-34" y="47" transform="matrix(0.668,-0.744,0.744,0.668,0,0)"
     style="font-size:30px;stroke-width:0px">JC!</text>
  </g>
</defs>
<use xlink:href="#foo" style="fill:orange" transform="translate(0,-100)" />
<use xlink:href="#foo" style="fill:yellow" transform="translate(0, 100)" />

仅当您希望所有可更改项目的属性都以相同方式设置时,此方法才有效。

与 HTML 不同,SVG 中的标记is演示文稿。我上面建议的是一些碰巧起作用的黑客,但总的来说<use>元素旨在实例化定义的完整外观。如果您需要每个实例的自定义外观,也许您应该考虑克隆元素、修改属性并将它们添加到文档中,而不是黑客攻击<use>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 use 元素上的 defs 中定义的属性 的相关文章

  • iOS/WKWebView 上 SVG 的随机故障渲染

    在我们的 iOS 应用程序中显示 SVG 图标时 我们遇到了奇怪的间歇性 非常偶然 渲染故障 基于WKWebView 当它确实发生时 它似乎可能与 CSS 相关 因为如果我在调试页面时在 Safari 中更改一些随机 甚至完全不相关 的 C
  • 在三角形内强制图表 d3.js

    我正在研究 d3 js 力图 我有一个问题 是否可以在具有某些坐标的三角形内制作力图 这是我的代码 var width 500 var height 500 margin var marginLeft 10 var marginTop 10
  • 用渐变色绘制一个 D3 圆

    如何用渐变颜色画一个圆 比如说 从黄色到蓝色的渐变 通常 要创建黄色圆圈 我们可以使用以下代码 var cdata 50 40 var xscale 40 var xspace 50 var yscale 70 var svg d3 sel
  • CSS 中的边框图像 svg(颜色)样式?

    是否可以从CSS样式填充自定义边框图像 我应该使用哪个属性 E g border image source url assets images dots new svg border color red doesn t work fill
  • 辅助功能:推荐 SVG 和 MathML 的替代文本约定?

    Overview HTML5 现在允许 http dev w3 org html5 markup syntax html svg mathml
  • SVG中的地理识别位置(GeoLocation/GeoTag)

    我想知道如何对 SVG 地图进行地理标记 我的搜索结果 地理标签以元数据格式提供 例如Exif http www awaresystems be imaging tiff tifftags privateifd gps html XMP h
  • 尝试旋转和变换 SVG 路径 - 我需要三角学计算吗?

    我正在尝试使用鼠标 SVG 路径进行操作 该路径代表电子电阻器的符号 该符号需要使用 引线 末端进行操作 如果您可以想象真实的电阻器 因此 我试图实现拖动第一个点周围 第二个点仍然存在 并且当在新坐标上拖动第一个点时 路径的所有点都按比例表
  • 从左到右显示 SVG 动画

    我有两个 SVG 图像 我想将它们设置为动画 如下所示 首先显示Full Screen文本从左到右 然后用第二个 SVG 覆盖该单词Screen显示整个第二个 SVG 因此 最后我将得到第二个 svg 中的单词 Full 黑色空间 以及单词
  • 在视图内调整 SVG 图像的大小

    我有一个 FloatingActionButton 其 SVG 图像绑定到它的 src 属性 但它没有显示我需要的尺寸 如何调整它的大小以显示更大的图像 这是我的画
  • Android Vector Drawable 不支持。如何修复它?

    尝试从 AndroidStudio 2 2 Ubuntu 14 04 的本地 svg 文件生成矢量资源时出现此错误 Could not generate a preview In icon svg ERROR line 6
  • 在 SVG 中绘制 DOM 对象时如何在 Canvas 中使用 Google 字体?

    根据 Mozilla 的文档 您可以在 Canvas 上绘制复杂的 HTML 例如this https developer mozilla org en US docs Web API Canvas API Drawing DOM obje
  • svg 圆不是用 javascript 绘制的

    我一直在尝试使用 HTML 中的 javascript 来进行 svg 操作的 hello world 我编写了下面的代码 虽然它生成了正确的 html 但我在浏览器中没有看到任何输出 也没有看到任何错误
  • SVG 文本元素上的 CSS 转换在 Safari 中不起作用

    尝试在父 SVG 中放置电池指示器 SVG
  • Qt 支持在 QIcon 中为 SVG 着色

    看来 Qt 不支持 SVG 中路径标签上的描边 填充选项
  • D3.js分组条形图

    I am making a bar chart using D3 js like this source statcan gc ca http www statcan gc ca pub 12 593 x 2007001 figures f
  • 使用 d3 进行多级/分组轴标签

    我想知道是否有一种简单的方法可以在 d3 中添加多级 分层 分组轴标签 例如 如果我有一个折线图 其中 x 轴的月份名称跨越多年 那么我还希望将年份作为月份名称下方的标签 因此它看起来像这样 Oct Nov Dec Jan Feb Mar
  • 如何以 JavaScript 编程方式获取旋转的 svg 文本边界

    我正在动态渲染 SVG 图像并创建旋转文本 如果旋转的文本与其他文本重叠 我需要删除该文本 但我无法测量旋转的文本来创建边界并检查下一个标签文本区域 我创建了 3 个 SVG 元素来解释 SVG 1 显示重叠的文本 SVG 2 显示重叠的旋
  • 镀铬中的 SVG 条带

    I am using a svg file to produce a smooth gradient when I noticed some serious banding issues in Google Chrome 20 Even s
  • 在 Jade 模板中包含 SVG xml

    是否可以创建一个 Jade mixin 它从文件系统读取文件 并将其回显到渲染的 HTML 中 我试过这个 mixin svg file var fs require fs var xml fs readFileSync file div
  • 底部带有三角形的 div 和背景图像

    我想做一个div 有一个底部的三角形 但我需要三角形上的背景图像为了出现 我尝试使用伪元素 after 但它不起作用 homebg after content position absolute top 100 left 0 right 0

随机推荐

  • SELECT 在 ON 子句中包含子字符串?

    我在ABAP中有以下选择语句 SELECT munic mandt VREFER BIS AB ZZELECDATE ZZCERTDATE CONSYEAR ZDIMO ZZONE M ZZONE T USAGE M USAGE T M2M
  • 注释空行[重复]

    这个问题在这里已经有答案了 在 vs code 中注释多行时使用ctrl 有没有办法也注释选择中的空白行 例如 如果我有以下代码 def A line1 line2 当所有这些行都被选择并注释时ctrl 我也希望空白行得到注释 例如 def
  • Chrome 扩展程序身份:OAuth2 请求失败:服务响应错误:“错误请求”

    我跟着https developer chrome com extensions tut oauth https developer chrome com extensions tut oauth完全一步一步 但我被困在 https dev
  • 如何使用 ASP.Net MVC 制作向导

    我们的网站有多个 向导 在多个页面上收集各种数据 并且直到最后一步才能将其提交到数据库 使用 ASP Net MVC 制作这样的向导的最佳 正确方法是什么 编辑 我的老板现在说 没有 javascript 关于如何绕过该限制有什么想法吗 我
  • 在 D 中制作结构体的堆副本

    如何创建堆栈上结构的垃圾收集副本 来自 C 背景 我的第一个猜测是像下面这样的复制构造函数 但它对于 D 来说似乎不太惯用 而且我在我看过的任何 D 项目中都没有看到过这样的复制构造函数 struct Foo immutable int b
  • 如何从控制器类打开 JavaFX FileChooser?

    我的问题是所有使用的例子FileChooser要求你通过一个阶段 唯一的问题是我的 UI 是在fxml文件 它使用与主阶段分开的控制器类 FXML protected void locateFile ActionEvent event Fi
  • 在 R 中,增长列表与增长向量一样低效吗?

    some list lt list for i in 1 1000 some list i lt i 我想知道如果 some list 是一个向量 这是否同样低效 答案似乎是 是 您可以对其进行基准测试 f function some li
  • 列表框.SelectedItem

    我有一个ListBox与填充的物品TextBoxes 从列表中进行选择时如何识别所选的文本字符串ListBox 这是我的 XAML 代码ListBox
  • CSS 内嵌边框

    我需要创建一个纯色插入边框 这是我正在使用的 CSS 代码 border 10px inset rgba 51 153 0 0 65 不幸的是 这会创建 3D 脊状边框 忽略正方形和黑色描述框 你可以使用box shadow 可能 some
  • 如何从 SvelteKit 应用程序发送安全的 API 请求,而不在客户端显示 API 密钥?

    我正在将 Supabase 用于新的 Sveltekit 应用程序 这个模板 https github com joshnuss svelte supabase 目前 我正在客户端传递 Supabase 密钥 如下所示 const supa
  • 相当于 C++ 中 Rust 的特定模板用法

    Rust 中是否有一个功能可以使这样的事情成为可能 据我所知 Rust 的泛型函 数不可能做到这一点 因为它们仅适用于数据类型 而不适用于值 include
  • 在asp.net core 3.1中使用log4net和Microknights登录数据库不起作用

    我看过很多文章说 net core 不支持 AdoNetAppender 但我们可以使用 MicroKnights 来做同样的事情 我正在尝试使用相同的方法在 net core 3 1 应用程序中实现数据库日志记录 但仍然没有成功 我放置在
  • 网页抓取中如何获取重定向的URL?

    我想要的只是请求实际 url 后重定向的 url 这是实际的网址https metric picodi net us r 19761 当我使用此 url 在浏览器上按 Enter 键时 它会将我重定向到这样的 url https www o
  • 仅将天数和时间(小时 x 分钟 x 秒)转换为时间

    我有一个数据框 在其中比较两个不同日期之间的差异以获得小时和分钟的差异 例如 start date 2018 07 03 16 03 00 data final 2018 07 05 00 00 00 duration data final
  • 交叉联接行为 (SQLServer 2008)

    我一直在尝试找出我的查询的问题 该查询实际上是由 hibernate 从 HQL 生成的 但生成的 SQL 并没有达到我的预期 稍微修改 SQL 会产生正确的结果 但我不确定为什么修改会产生任何差异 原始查询 不返回任何行 select s
  • 如何在 Rust 中惯用地替换特定字符?

    所以我有字符串 Hello World 并想替换 和 这样新字符串就是 Hello World 在 Ruby 中 我们可以使用以下命令轻松完成此操作gsub method Hello World gsub 如何在 Rust 中惯用地做到这一
  • 创建随机二进制文件

    我正在尝试使用 python 创建一个随机二进制文件 这就是我已经得到的 f open filename wb for i in xrange size kb for ii in xrange 1024 4 f write struct p
  • MarshalAs 嵌套结构

    我有两个 C 结构 在从 C 调用 DLL 方法时必须将它们作为参数发送 例如 让我们将它们定义为 struct A int data struct B int MoreData A SomeData 我需要从 C 调用的方法具有以下签名
  • 在 IE 中打开新选项卡

    我正在使用以下代码在 Internet Explorer 中打开网站 ProcessStartInfo startInfo new ProcessStartInfo Arguments http www example com FileNa
  • 更改 use 元素上的 defs 中定义的属性

    如何通过脚本来更改 defs 中定义的 use element 的样式 我试图进入 w3c 工作草案界面 但我迷失在那个迷宫中