From 9d8366278b2e9e5d0933471dd5d4c94dab11e033 Mon Sep 17 00:00:00 2001 From: Steven Lambert Date: Thu, 30 May 2019 15:14:05 -0600 Subject: [PATCH] fix(virtual-node): fix hasClass to work with svg elements (#1603) --- lib/core/base/virtual-node.js | 10 ++++++---- test/core/base/virtual-node.js | 8 ++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/core/base/virtual-node.js b/lib/core/base/virtual-node.js index 279b4700fb..8aa998d783 100644 --- a/lib/core/base/virtual-node.js +++ b/lib/core/base/virtual-node.js @@ -36,15 +36,17 @@ class VirtualNode { * @return {Boolean} True if the actualNode has the given class, false otherwise. */ hasClass(className) { - if (typeof this.actualNode.className !== 'string') { + // get the value of the class attribute as svgs return a SVGAnimatedString + // if you access the className property + let classAttr = this.attr('class'); + if (!classAttr) { return false; } let selector = ' ' + className + ' '; return ( - (' ' + this.actualNode.className + ' ') - .replace(whitespaceRegex, ' ') - .indexOf(selector) >= 0 + (' ' + classAttr + ' ').replace(whitespaceRegex, ' ').indexOf(selector) >= + 0 ); } diff --git a/test/core/base/virtual-node.js b/test/core/base/virtual-node.js index d3c22084d3..da2df876bf 100644 --- a/test/core/base/virtual-node.js +++ b/test/core/base/virtual-node.js @@ -59,6 +59,14 @@ describe('VirtualNode', function() { assert.isTrue(vNode.hasClass('visually-hidden')); }); + it('should return true for svg elements', function() { + node = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + node.setAttribute('class', 'my-class'); + var vNode = new VirtualNode(node); + + assert.isTrue(vNode.hasClass('my-class')); + }); + it('should return false when the element does not contain the class', function() { var vNode = new VirtualNode(node);