JQuery + SVG 对象:正确捕获点击事件

mat*_*sdv 5 html jquery svg jquery-selectors

好的,我正在尝试捕获菜单项上的点击事件

这是我的html:

<nav>
<ul>
    <li class="active left" id="profileLink">
        <object type="image/svg+xml" data="public/img/nav/profile.svg">    
                <img src="public/img/nav/profile.png" alt="Blue Square"/>     
        </object>
    </li>
    <li class="left" id="suggestionsLink">
        <object type="image/svg+xml" data="public/img/nav/suggestions.svg">    
                <img src="public/img/nav/suggestions.png" alt="Blue Square"/>     
        </object>
    </li>
    <li class="right" id="settingsLink">
        <object type="image/svg+xml" data="public/img/nav/settings.svg">    
                <img src="public/img/nav/settings.png" alt="Blue Square"/>     
        </object>
    </li>
    <li class="right" id="statisticsLink">
        <object type="image/svg+xml" data="public/img/nav/statistics.svg">    
                <img src="public/img/nav/statistics.png" alt="Blue Square"/>     
        </object>
    </li>

    <li class="middle" id="friendsLink">
        <object type="image/svg+xml" data="public/img/nav/friends.svg">    
                <img src="public/img/nav/friends.png" alt="Blue Square"/>     
        </object>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的脚本:

    $("#wrapper").on("click", '#friendsLink', function(){
       console.log('test');
       loadFriends();
    });
Run Code Online (Sandbox Code Playgroud)

当我使用脚本选择一个普通的 a 标签时,它工作得很好,但在这个 svg 对象上它根本不起作用。请注意,当单击 li 元素的填充区域时,它确实起作用。但当单击 svg-image 区域时则不会。

该线程中的一篇文章表明 svg dom 与 html dom 不同,因此 jquerys 事件失败。

jQuery 选择器 + SVG 不兼容?

尝试处理 svg 元素上的单击事件时该怎么做?

非常感谢帮助

Rob*_*son 3

如果你想使用,<object>你必须将点击处理放在 svg 内容上,即<svg>public/img/nav/profile.svg 的根元素等。

如果想保持原样处理,那么您需要使用<image>元素作为<svg>容器而不是<object>元素。但这也有其自身的限制,例如没有脚本和没有后备。

第三种选择可能是在每个 svg 元素上放置一个绝对定位的透明 div,并对其进行 onclick 处理。

您必须选择最适合您需求的解决方案。