我正在尝试做的事情
我刚从 Font Awesome 4.7 切换到 Font Awesome 5,一切都很好,除了一件事:在我的网站的一部分,我使用了一个很棒的字体图标作为切换-esk 按钮。单击时,我想将“打开”的心更改为“关闭”的心图标(fas fa-heart <-> far fa-heart)。我可以通过更改浏览器检查器中 SVG 元素中的数据前缀来做到这一点。
问题
我的问题在于绑定点击监听器,因为那里的元素被删除并替换为 SVG。我动态地将元素添加到具有这些心形图标的页面上,并在使用 JS 把手生成 HTML 之后,我使用 jquerys .on("click") 方法来获取单击按钮并切换类的时间。当元素没有被替换时这很好,但是随着对 SVG 的更改,这样做的新方法是什么?
可能的解决方案
我通读了 Font Awesome 的“操作方法”指南,但它们还没有涵盖这样的主题。这是人们想要做的常见事情,因此获得人们可以使用的解决方案列表会很好。以下是我想到的两个想法,但是 FontAwesome 必须提供的一个想法,但我很好奇是否有更好的方法:
- 在添加侦听器之前使用短暂的超时时间 - 但是充其量似乎很hacky。
- 单击时使用包装器元素,然后在每次单击时搜索 SVG 元素。
- FontAwesome 可以在图标被替换时提供回调。
示例小提琴
这是一个简化的示例,其中一个按钮被动态附加到文档中(如果使用 $(document).ready() 可以正常工作,但我正在执行 API 请求,然后动态生成 html)。单击按钮不会调用侦听器,因为元素尚未完成将元素替换为 SVG。
https://jsfiddle.net/L748ownw/
<div id='container'></div>
$("#container").append("<i id='heart' class='far fa-heart'></i>");
$(".far").on("click", function() {
console.log("clicked");
});
这个例子适用于 FontAwesome 4.7,因为元素没有被替换。