这是在jQuery 3.x.x版本之前针对addClass,removeClass,hasClass jquery方法的一种破解。
$.fn.extend({
addSVGClass: function (cls) {
return this.each(function() {
var classList = $(this).attr('class');
if (classList) {
var classListArr = classList.split(" ");
if (classListArr.indexOf(cls) === -1) {
classListArr.push(cls);
classList = classListArr.join(" ").trim();
$(this).attr('class', classList);
}
} else {
$(this).attr('class', cls);
}
});
},
removeSVGClass: function (cls) {
return this.each(function() {
var classList = $(this).attr('class');
if (classList) {
var classListArr = classList.split(" ");
if (classListArr.indexOf(cls) !== -1) {
delete classListArr[classListArr.indexOf(cls)];
classList = classListArr.join(" ").trim();
$(this).attr('class', classList);
}
}
});
},
hasSVGClass: function (cls) {
var el = this[0];
var classList = $(el).attr('class');
if (classList) {
var classListArr = classList.split(" ");
if (classListArr.indexOf(cls) !== -1) {
return true;
} else {
return false;
}
}
return false;
}
});
用法:
$('.svg-element').addSVGClass('selected');
只是一个侧面说明,你就是缺少');'到底:)以及,似乎为我工作(http://jsfiddle.net/hungerpain/V4BNT /) – krishgopinath
有趣...尝试设置一个变量等于'$(this).attr(“class”)'然后使用'hasClass'与该变量。仍然是假的? – tymeJV
SVG中的元素并不是真正的HTML,因此这些元素缺少属性,这就是为什么获取该属性的原因,但使用hasClass(可能检查className属性)不起作用。 – adeneo