Tengo un elemento de destino que es un SVG que tiene dos propiedades baseVal y aniVal , por lo que estoy tratando de obtener el indexOf adecuado del nombre de className del elemento de destino SVG.
$('body').on('click', function (e) { if (e.target.className.baseVal && e.target.className.baseVal.indexOf('close') > -1) { return; } else if (e.target.className && e.target.className.indexOf('close') > -1) $(e.target).closest(".popover").remove(); $('.popover').each(function () { whatever the code; }); });className en un elemento HTML "normal" es una cadena simple, solo cuando se trata de un elemento de destino SVG, será una instancia de SVGAnimatedString , que luego tiene una propiedad baseVal .
Intentó tener eso en cuenta con su if/else ya, pero no del todo correctamente. El valor aún podría ser una instancia de SVGAnimatedString , pero su baseVal podría no contener close , en cuyo caso ingresa a la rama else y allí intenta llamar a indexOf en esa SVGAnimatedString , que no posee.
Debe separar su condición if en dos comprobaciones separadas aquí:
$('body').on('click', function (e) { if (e.target.className.baseVal !== undefined) { if (e.target.className.baseVal.indexOf('close') > -1) { return; } } else if (e.target.className && e.target.className.indexOf('close') > -1) $(e.target).closest(".popover").remove(); $('.popover').each(function () { //whatever the code; }); } }); ( if ese nuevo "interno" todavía necesita una rama else, depende de lo que quiera que suceda cuando el elemento de destino es un SVG, pero no contenía close ).
Editar: verificación modificada para la propiedad baseVaL a !== undefined , porque de lo contrario, un baseVal vacío también lo haría ir a la rama else.
¿Crees que esto ayudaría?
$('body').on('click', function (e) { if (e.target.classList.contains('close')) { $(e.target).closest(".popover").remove(); } $('.popover').each(function () { // whatever the code; }); }); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <button class="close">Click 1 </button> <button>Click 1 </button> <button>Click 1 </button> <button>Click 1 </button>