JS / onload / querySelector / одинарные косые кавычки / ${…}

336
29 сентября 2017, 20:24

Есть функция, которая заменяет дивы на картинки:

(function replaceImg(){
  var divs = document.body.querySelectorAll('.img-replace');
  for (var i = 0; i < divs.length; i++) {
      var img = document.createElement('img');
      img.src = divs[i].getAttribute('data-src');
      img.onload = function(){
          document.body.replaceChild(this, document.body.querySelector(`[data-src="${this.src}"]`));
      };
      img.onerror = function(){};
  };
}());

она работает, как и должна...

1) меня интересует querySelector, а именно то, почему в скобках пишутся одинарные косые кавычки. Я их встречаю впервые. Если эти косые одинарные кавычки `` заменить обычными одинарными ' ' - то получим ошибку - Uncaught TypeError: Failed to execute 'replaceChild' on 'Node': parameter 2 is not of type 'Node'. Почему нужно писать именно их? И в каких случаях? Только если документ уже загружен, и нужно достать что-то из построенного DOMa?

img.onload = function(){
 document.body.replaceChild(this, document.body.querySelector(`[data-src="${this.src}"]`));
};

2) также интересует вопрос насчёт этого синтаксиса - ${this.src} В каких случаях используется доллар и фигурные скобки? Зависит ли это от наличия this или нет?

Answer 1

На самом деле оба пункта связаны.

Эти кавычки используются в ES6 для интерполяции.

А ${выражение}- собственно конструкция, в которой можно писать выражения и переменные js, значение которых будет вставлено в строку.

Эта конструкция без обратных кавычек не работает, потому и ошибка(коротко говоря,это как querySelector("[data-src='"+this.src+"']"));

Ну а this.scr, на сколько я понял,- это мы просто берём атрибут src из данного img

И почитайте хотя бы статьи по основам ES6- там много вкусного появилось

READ ALSO
Как передавать параметры в скрипт?

Как передавать параметры в скрипт?

Нужно в скрипт передавать данные в таком виде:

255
Подключение React в проект [требует правки]

Подключение React в проект [требует правки]

Необходимо подключить библиотеку react в уже готовый проект и вывести с его помощью любой массив данных, в проекте используется gulpКак это сделать...

281
VBA post-запрос на Frankfurt Boerse

VBA post-запрос на Frankfurt Boerse

Привет всем! Задача стоит выгрузить исторические котировки по ценной бумаге с сайта Франкфуртской биржи за периодНапример, по вот этой бумаге...

239