jQuery SVG,为什么我不能添加类(addClass)?

6 浏览
0 Comments

jQuery SVG,为什么我不能添加类(addClass)?

我正在使用jQuery SVG。我无法向对象添加或删除类。有人知道我的错误吗?\nSVG:\n


\n无法添加类的jQuery代码:\n

$(".jimmy").click(function() {
    $(this).addClass("clicked");
});

\n我知道SVG和jQuery能够很好地协同工作,因为当点击时,我可以选择该对象并触发一个警报:\n

$(".jimmy").click(function() {
    alert('调用.click()的处理程序。');
});

0
0 Comments

jQuery SVG插件为什么无法添加addClass?

问题的原因是,jQuery 3之前的版本在处理SVG元素时使用了className属性,而对于SVG元素,className是一个SVGAnimatedString的实例,而不是字符串。因此,当将SVGAnimatedString对象强制转换为字符串时,会得到"[object SVGAnimatedString]",导致jQuery无法正常工作。

解决方法是升级到jQuery 3。jQuery 3修复了这个问题,并添加了对SVG元素的类操作支持。

另外,jQuery SVG插件也提供了一个解决方案,它通过修补相关函数来添加对SVG的支持。在这个插件中,通过判断元素是否是SVG元素,如果是,就使用SVGAnimatedString对象的baseVal属性,否则使用class属性来获取元素的类名。

虽然jQuery当前将完整的SVG支持视为超出了其核心功能的范围,但仍然提供了jQuery SVG插件来处理这个问题。

0
0 Comments

问题:为什么我无法在jQuery SVG中添加addClass?

原因:在Chrome浏览器中,对于SVG子元素,.classList属性似乎是未定义的。IE浏览器也不支持在SVG元素上使用.classList属性。

解决方法:可以使用DOM API中的element.classList属性来添加类,而无需使用jQuery SVG插件或jQuery。另外,对于不支持.classList属性的旧版本浏览器,可以使用polyfill进行兼容处理。

以下是一个解决方法的示例代码:

$(".jimmy").click(function() {
    this.classList.add("clicked");
});

需要注意的是,在使用上述代码时,要确保浏览器支持.classList属性。如果不支持,可以考虑使用polyfill进行兼容处理。

在Chrome浏览器中,这种方法可以正常工作。但是在IE浏览器中,无法修改SVG元素的类。可以参考Caniuse网站上的相关信息。

对于不支持.classList属性的旧版本浏览器,可以在Mozilla开发者网络(MDN)上找到polyfill的实现代码。

希望以上解决方法对您有帮助!

0
0 Comments

jQuery SVG, why can't I addClass?

在jQuery 3之前的版本中,无法使用addClass函数给SVG元素添加类。但是可以使用.attr()函数来操作SVG元素的类。如果你想依赖于jQuery,可以使用以下代码来替代addClass和removeClass函数:

$("#item").attr("class", "oldclass newclass"); // 替代addClass("newclass")
$("#item").attr("class", "oldclass"); // 替代removeClass("newclass")

如果你不想依赖于jQuery,则可以使用以下代码:

var element = document.getElementById("item");
element.setAttribute("class", "oldclass newclass"); // 替代addClass("newclass")
element.setAttribute("class", "oldclass"); // 替代removeClass("newclass")

然而,需要注意的是,非jQuery版本在旧版本的IE浏览器(尤其是IE7及更早版本)中无法正常工作,因为setAttribute()方法在SVG元素中存在问题。

此外,有一位用户提出了如何保留原有类的问题。你可以在示例中的`oldclass`处填写原有类名。

需要注意的是,有用户提到jQuery 3并没有修复这个问题。另外,IE浏览器不支持在SVG元素上使用classList。

总之,如果你想给SVG元素添加类,可以使用上述的替代方法来实现。

0