Home > front end >  How to rewrite code without the .video element in it?
How to rewrite code without the .video element in it?

Time:11-30

How would that be done here? https://jsfiddle.net/bqfv5j06/

Those were the instructions I was given.

Currently, I am telling JavaScript to go find it every time a button is clicked. This is the equivalent of Googling for the person’s phone number everyday. It is a waste of time and system resources.

document.querySelectorAll('button.cover').forEach(function(button) {
  button.addEventListener('click', function (event) {
    document.querySelector('.video').dataset.id = event.target.dataset.id;
  });
});

How exactly would this be done?

Me: If I understand you correctly, you are wanting me to rewrite that code without the .video element included in it?

Do I have that correct?

And the answer I got back was, "Yes"

CodePudding user response:

Your instructor wants you to cache the result of the call once, and then use that cache instead of searching the DOM every time.

const myVideo = document.querySelector('.video');

document.querySelectorAll('button.cover').forEach(function(button) {
  button.addEventListener('click', function (event) {
    myVideo.dataset.id = event.target.dataset.id;
  });
});

If you want to use this with a "standard for loop", you can do this:

const myVideo = document.querySelector('.video');

const buttons = document.querySelectorAll('button.cover');

for (let i = 0; i < buttons.length; i  ) {
  buttons[i].addEventListener('click', function (event) {
    myVideo.dataset.id = event.target.dataset.id;
  });
}
// or
for (const button of buttons) {
  button.addEventListener('click', function (event) {
    myVideo.dataset.id = event.target.dataset.id;
  });
}
  • Related