【发布时间】:2023-03-20 05:40:01
【问题描述】:
我有一组带有 node 和 link 类的 SVG 元素。我的程序应该在悬停在任何 SVG 元素上时检测元素是否具有 node 类或 link 类。但是,由于某种原因,.hasClass() 似乎不起作用:
$(".node").hover(function(evt){
console.log($(this).attr("class")); //returns "node"
console.log($(this).hasClass('node')); //returns false
}, function(){console.log("Done");});
所以我悬停的元素有 node 类,jQuery 也检测到这一点,如 console.log($(this).attr("class")); 所示,但由于某种原因,实际的 .hasClass() 失败了。为什么是这样?是否因为 SVG 而失败?
【问题讨论】:
-
只是一个旁注,你最后错过了
);:) 和seems to work for me -
SVG 中的元素并不是真正的 HTML,因此这些元素中缺少属性,这就是获取属性有效的原因,但使用可能检查 className 属性的 hasClass 不起作用。
-
其实不太一样,但只要其他类都不包含字符串“node”就可以了。
-
请记住,在使用 SVG 时,元素没有 className、innerHTML 等内容,因此并非 jQuery 中的所有内容都适用于这些元素。
-
jQuery 2.2.0 修复了这个问题 - 你可以在这里看到我的帖子:stackoverflow.com/a/34698009/3885376 包含一些细节 + 一个小例子,现在是
hasClass()、addClass()和removeClass()工作。
标签: javascript jquery html css svg