jQuery SVG,为什么我不能添加类(addClass)?
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插件来处理这个问题。
问题:为什么我无法在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的实现代码。
希望以上解决方法对您有帮助!
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元素添加类,可以使用上述的替代方法来实现。