JavaScript Document.querySelector()

时间:2017-02-21 10:53:32

标签: javascript

我是JavaScript的初学者,我正在关注30天 javascript30.com 任务中的一个,并第一次看到document.querySelector()

我很清楚阅读MDN - Query Selector它的作用,但是我无法弄清楚它是如何在代码中使用的,尤其是:

  • 这里的美元符号是什么意思? (我知道这种语言没有具体含义,让我感到困惑)

  • 一般来说,我不明白选择器括号()之间发生了什么,这个:

    const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
    

任何人都可以帮助我吗?

谢谢!

这是构建鼓组的代码:



function playSound(e) {
  const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
  const key = document.querySelector(`div[data-key="${e.keyCode}"]`);

  if (!audio) return;
  audio.currentTime = 0;
  audio.play();
  key.classList.add('playing'); //add class defined in css
}

function removeTransition(e) {
  if (e.propertyName !== 'transform') return;
  this.classList.remove('playing');
}

const keys = document.querySelectorAll('.key');
keys.forEach(key => key.addEventListener('transitionend', removeTransition));

window.addEventListener('keydown', playSound);

<div class="keys">
  <div data-key="65" class="key">
    <kbd>A</kbd>
    <span class="sound">clap</span>
  </div>
  <div data-key="83" class="key">
    <kbd>S</kbd>
    <span class="sound">hihat</span>
  </div>
  <div data-key="68" class="key">
    <kbd>D</kbd>
    <span class="sound">kick</span>
  </div>
  <div data-key="70" class="key">
    <kbd>F</kbd>
    <span class="sound">openhat</span>
  </div>
  <div data-key="71" class="key">
    <kbd>G</kbd>
    <span class="sound">boom</span>
  </div>
  <div data-key="72" class="key">
    <kbd>H</kbd>
    <span class="sound">ride</span>
  </div>
  <div data-key="74" class="key">
    <kbd>J</kbd>
    <span class="sound">snare</span>
  </div>
  <div data-key="75" class="key">
    <kbd>K</kbd>
    <span class="sound">tom</span>
  </div>
  <div data-key="76" class="key">
    <kbd>L</kbd>
    <span class="sound">tink</span>
  </div>
</div>

<audio data-key="65" src="sounds/clap.wav"></audio>
<audio data-key="83" src="sounds/hihat.wav"></audio>
<audio data-key="68" src="sounds/kick.wav"></audio>
<audio data-key="70" src="sounds/openhat.wav"></audio>
<audio data-key="71" src="sounds/boom.wav"></audio>
<audio data-key="72" src="sounds/ride.wav"></audio>
<audio data-key="74" src="sounds/snare.wav"></audio>
<audio data-key="75" src="sounds/tom.wav"></audio>
<audio data-key="76" src="sounds/tink.wav"></audio>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

这是ECMA 2015中引入的Template Literal

  

模板文字由后面的勾号(``)(重音符号)括起来   字符而不是双引号或单引号。模板文字可以   包含占位符。这些由美元符号表示   花括号($ {expression})。地方持有人和表达者的表达   它们之间的文本传递给一个函数。默认功能   只需将部分连接成一个字符串即可。如果有的话   在模板文字(此处为标记)之前的表达式,模板   string被称为“标记模板文字”。在那种情况下,标签   使用已处理的表达式调用表达式(通常是函数)   模板文字,然后您可以在输出之前进行操作。至   在模板文字中转义后退,在前面加一个反斜杠\   背蜱。

var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20."