如何使用 javascript 链接两个元素的数据键属性?
2017-07-09
3083
我一直在关注 #javascript30 课程,在该课程中,他使用 javascript 和 keydown 事件将 div 的数据键与音频的数据键链接起来,如下所示
html
<div data-key = "65" class = "key">
<kbd> A </kbd> <br> <span> Boom </span>
</div>
<audio data-key = "65" src = "sounds/boom.wav" id = "boom"> </audio>
javascript
function playSound(e)
{
const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
audio.play();
}
现在我想在单击 div 时播放音频,但我不知道如何开始。我尝试过,但它显示 Uncaught ReferenceError:key is not defined 。那么我如何让它在单击事件时播放音频?
注意:我有八个不同的音频文件,用于八个不同的 div。相应的对具有相同的数据键。
$(".key").click(function()
{
const audio = document.getElementById(`${this.data-key}`)
console.log(audio);
audio.play();
});
3个回答
您必须获取
data-key
属性的值。使用
模板文字
,它会在您的选择器中为您提供
${
语法,您可以使用 Vanilla JS 或 jQuery 按照以下两个示例执行此操作。我建议
阅读有效的 DOM 选择器
以及基本的
dom 元素属性
访问。
DOM 元素属性不是元素的顶级属性。它位于元素的
attributes
属性中的
NamedNodeMap
中。
$(".key").click(function(e) {
const audio = document.querySelector(`audio[data-key="${this.attributes['data-key'].value}"]`);
console.log(audio);
audio.play();
// or using jQuery
// const audio = $(`audio[data-key="${$(this).attr('data-key')');
// audio[0].play();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-key="65" class="key">
<kbd> A </kbd> <br> <span> Boom </span>
</div>
<audio data-key="65" src="http://freewavesamples.com/files/Alesis-Sanctuary-QCard-AcoustcBas-C2.wav" id="boom"> </audio>
metame
2017-07-09
如果您有多个音频,您可以使用这个
$(".key").click(function() {
var key = $(this).data('key');
var audio = $('audio[data-key='+key+']');
audio[0].play();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-key="65" class="key">
<kbd> A </kbd> <br> <span> Boom </span>
</div>
<audio data-key="65" src="http://freewavesamples.com/files/Alesis-Sanctuary-QCard-AcoustcBas-C2.wav"> </audio>
slashsharp
2017-07-09
有很多方法可以做到这一点,使用你熟悉的
this.dataset.key
或
$(this).data('key')
:
$(".key").click(function() {
const audio = document.querySelector(`audio[data-key="${this.dataset.key}"]`);
console.log(audio);
audio.play();
});
function playSound(e) {
const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
audio.play();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-key="65" class="key">
<kbd> A </kbd> <br> <span> Boom </span>
</div>
<audio data-key="65" src="sounds/boom.wav" id="boom"> </audio>
vol7ron
2017-07-09