Как jQuery append () с backquote (``) может пропустить / не отобразить строковую переменную? - PullRequest
0 голосов
/ 05 июля 2019

Я создаю несколько каруселей на веб-странице с помощью jQuery, вызывая всю необходимую мне информацию с YouTube с помощью YouTube Data API v3. После выполнения проектирования и функций я борюсь с одной простой вещью, которую я не могу понять.

Я использую append(``), чтобы я мог добавить весь необходимый мне HTML-элемент к нужному элементу, а также вставить другую информацию с переменными в нотацию ${var}.

Все отлично работает, КРОМЕ для одной строковой переменной preview. Это похоже на то, что оно не распознается как переменная и в конечном выводе отображается как строковый чанк Теперь немного кода.

Это подготовка к вызову функции, которая загружает все:

jQuery(document).ready(function () {
    var apikey = 'my-api-key';
    var URL = 'https://www.googleapis.com/youtube/v3/playlistItems';
    var playlists = {
        1: 'PL549CFEF61BF98279',
        2: 'PLX_IxBH-yGtonzSE2zyplhI2oky7FWvbE',
        3: 'PL038B3F56D598DD61',
        4: 'PLDDFDDD10E5584056',
        5: 'PLD4F65416EB11640F',
    }

    loadVids(apikey, URL, playlists);
});

Далее loadVids , для каждого вызова списка воспроизведения YouTube getJSON() и получения данных:

function loadVids(apikey, URL, playlists) {
    for (const menuid in playlists) {
        var options = { part: 'snippet', key: apikey, maxResults: 20, playlistId: playlists[menuid] }
        jQuery.getJSON(URL, options, function (data) {
            resultsLoop(data, menuid, apikey);
        });
    }
}

затем resultLoop с использованием each() помещает всю информацию в некоторый HTML-код, который будет добавлен где-то на веб-странице (я удалил все исходные атрибуты, чтобы сделать его читаемым).

function resultsLoop(data, menuid) {
    jQuery.each(data.items, function () {

        var alttext = this.snippet.title;
        var title = alttext.substring(0, 57) + '…'
        var vid = this.snippet.resourceId.videoId;
        var preview = this.snippet.thumbnails.standard.url;

        jQuery("#carousel-" + menuid + " ul")
        .append(`
<li>
    <article>
        <div>
            <a href="//www.youtube.com/watch?v=${vid}&fs=1&autoplay=0&rel=0">
                <img alt="${alttext}" src="${preview}">
            </a>
        </div>
        <div>
            <h4><a href="/index.php?Itemid=${menuid}" title="${alttext}">${title}</a></h4>
        </div>
    </article>
</li>
`);
    });
}

В конце тег <img> равен

<img alt="some text" src="/$%7Bpreview%7D">

Я пытался:

  • изменить имя переменной
  • консоль регистрирует его до, после append(), без проблем
  • typeof говорит, что это нормальная строка
  • это дает мне одинаковый результат в каждом браузере

Я действительно не понимаю, что я делаю неправильно, и только preview не работает, все остальные переменные в append() работают правильно.

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Почему вы не используете concat, как вы уже использовали для jQuery ("# ​​carousel-" + menuid + "ul") !!

Пример: (Пожалуйста, используйте этот код для добавления и проверки, я использовал одинарную кавычку, а не обратную кавычку, так как она не принята проверкой js)

jQuery("#carousel-" + menuid + " ul").append('<li><article><div><a href="//www.youtube.com/watch?v=${vid}&fs=1&autoplay=0&rel=0"><img alt="'+alttext+'" src="'+preview+'"></a></div><div><h4><a href="/index.php?Itemid='+menuid+'" title="'+alttext+'">'+title+'</a></h4></div></article></li>');

и удалите все пробелы из строки добавления. Я надеюсь, что это то, что ищет.

0 голосов
/ 05 июля 2019

Просто чтобы вы знали, все вышеперечисленное работало на странице Joomla.

Взяв весь код, кроме jQuery(document).ready(function(){...loadVids()...}, и поместив его в файл .js, решил все.

Я думаю, что есть какой-то фильтр, который не позволит вам вводить внешние ресурсы, такие как https://i.ytimg.com/vi/lmuUD9_eDnY/sddefault.jpg, на страницу только с javascript (и это умно), но фильтр не применяется, если вы включите a.Файл js внутри самого сайта.

Посредственный обходной путь для посредственного кода JavaScript.Спасибо Рори в комментариях, которые дали мне некоторое представление.

...