jquery - 仅当现有填充颜色为特定值时才填充 SVG

标签 jquery svg

我正在使用此代码来更改 SVG 对象的填充颜色,它可以工作:

  $(function() {
      $('g').mouseenter(function () {
              $('path, rect, circle', this).attr('fill', '#00C8C8');
      })
  });

但是,我只想在现有填充颜色具有特定值时更改填充颜色。所以,我想到了这样的事情:

  $(function() {
      $('g').mouseenter(function () {
          if($('circle', this).attr('fill') == '#DCDCFF'){
              $('circle', this).attr('fill', '#00C8C8');
          }
      })
  });

编辑:...再次,jsfiddle 中的轻微错误(感谢罗伯特)

我在 jsfiddle 上创建了一个页面:http://jsfiddle.net/Wc9ZE/4/

为了展示我想要表达的意思,我还使颜色更加清晰。

问题是,所有的矩形都变黄然后变红,我只想让原来是黄色的大矩形变红然后变回黄色。白色小矩形应保持白色。

最佳答案

你的括号位置不对

if($('path, rect, circle', this).attr('fill') == '#DCDCFF') {

jsfiddle 看起来相当奇怪,因为在第一个循环中您使用的是 val 而不是 attr,即

if ($('circle', this).val('fill')

应该是

if ($('circle', this).attr('fill')

不应该吗?

最后,如果您只想让它在一个矩形上工作,那么您应该给该矩形一个 id 属性(下面我假设 id="r"),然后像这样更改代码...

  $(function () {
      $('g').mouseenter(function () {
          if ($('circle', this).attr('fill') == 'yellow') {
              $('circle', this).attr('fill', 'pink');
          }
          if ($('#r', this).attr('fill') == 'red') {
              $('#r', this).attr('fill', 'yellow');
          }
      }).mouseleave(function () {
          if ($('#r', this).attr('fill') == 'yellow') {
              $('#r', this).attr('fill', 'red');
          }
          if ($('circle', this).attr('fill') == 'pink') {
              $('circle', this).attr('fill', 'yellow');
          }
      });
  });

关于jquery - 仅当现有填充颜色为特定值时才填充 SVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18590985/

相关文章:

javascript - 如何暂时禁用 d3.js 中的缩放

javascript - 是否有任何选项可以打印 c3js 生成的图表?

C# .svg 文件到 System.Drawing.Image

javascript - 如何在 WordPress 插件中组合 2 个 javascript/jquery 函数

javascript - 将参数 append 到当前 URL 上

javascript - Knockout - 将 CSS 类分配给 View 模型的输入

javascript - 像粘性一样滚动时如何使侧边栏固定

javascript - 使用 Imagick 将 SVG 转换为 PNG 时无法获得正确的图像

从 servlet 返回到 JSP 时,Javascript 更改消失

svg - 使用 Jekyll,SVG 图形内部的链接不起作用