jquery - 如何避免 jQuery 中的函数重复
问题描述
我对 jQuery 很陌生,目前正在研究www.image.cards,这是一个学习荷兰语的工具。
单击图像以显示荷兰语单词,然后单击音符以播放显示发音的音频文件。
这些音符有自己的 id (id='horse'),而 mp3 文件有自己的名称 (./mp3/horse.mp3)。
这是我的 HTML:
<section>
<div class="card">
<div class="front"><img src="/img/horse.png"></div>
<div class="back">
<p>Horse</p><b id="horse">♫</b>
</div>
</div>
</section>
我正在使用 jQuery,如下所示:
$("#horse").click(function () {
var horse = new Audio("./mp3/horse.mp3");
horse.play();
});
我目前正在为每张卡添加一个功能。我不介意,但我觉得有一种更聪明的方法可以做到这一点,因为 button-id 和 mp3 文件具有相同的名称。
也许以某种方式将“id”的名称复制并粘贴到.mp3?
我没有成功尝试以下方法:
var $this = $(this);
$('.back b[name="'+$this.attr('id')+'"]', .play("./mp3/'$this'.mp3");
});
我究竟做错了什么?有没有更好的办法?
每一天都是上学日!
解决方案
找到所有这些可点击元素的通用选择器。
显然所有b
元素都是div
具有 class 的元素的子元素back
,您可以这样做:
$(".back>b").click(function(){
new Audio("./mp3/" + this.id + ".mp3").play();
});
请注意,$(this).attr("id")
将评估为与 相同this.id
。
推荐阅读
- spring - 模仿 `reduceWhile` 之类的运算符
- android - 在 viewpager2 中禁用动画
- django - 使用用户以外的模型授权客户端
- sql - 如何从 oracle 获得最接近的值
- r - R - 在几个动作上运行一个循环
- javascript - 使用JS将鼠标悬停在文本上时更改正文背景图像
- vaadin - TemplateRenderer 返回 null (Vaadin Flow / 14.1)
- java - java.lang.IllegalStateException:没有在 xxxxx(位置地址)错误上设置 NavController
- c - 左移给了我奇怪的结果
- c# - 我怎样才能把这个简单的方法变成一个通用的方法?