无法获取图像 URL 并将其用作 CSS 背景图像

Can't fetch image URL and use it as CSS background image

我有一个无序列表 wist List Items,它是使用 Fetch 方法创建的。数据是 JSON 数据,需要转发到 HTML 文档

我希望创建的列表项具有基于 JSON 数据 URL 的 CSS 背景。它看起来像这样;

fetch(url).then(function(response){
    return response.json();
    JSON.stringify(data);
}).then(function(data){

    for(var i=0;i<data.length;i++){
        var createListItem = document.createElement("li");
        createListItem.className = "listItem";
        var listItem = document.querySelector(".listItem");

        var createHeaderItem = document.createElement("h3");
        createHeaderItem.innerHTML = data[i].title;

        ul.appendChild(createListItem);
        createListItem.appendChild(createHeaderItem);

        if (data[i] && data[i].media[0] && data[i].media[0].url) {
            listItem.style.backgroundImage = "url('"+""data[i].media[0].url""+"')";

        } else {
            listItem.style.backgroundImage = "none";
    }
}
});

我无法获取列表项样式背景来中继 URL。获取 data.media.url 并将其用作 CSS 列表项 属性 的正确方法是什么?

看来你的引号太多了

尝试删除第一个 + 之后和第二个 + 之前的引号

  listItem.style.backgroundImage = "url('"+""data[i].media[0].url""+"')";

  listItem.style.backgroundImage = "url('"+ data[i].media[0].url +"')";

已编辑:

for(var i=0;i<data.length;i++){
    var createListItem = document.createElement("li");
    createListItem.className = "listItem";

    var createHeaderItem = document.createElement("h3");
    createHeaderItem.innerHTML = data[i].title;

    ul.appendChild(createListItem);
    createListItem.appendChild(createHeaderItem);



    var listItem = document.querySelector(".listItem");


    if (data[i] && data[i].media[0] && data[i].media[0].url) {
        listItem.style.backgroundImage = "url('"+ data[i].media[0].url +"')";

    } else {
        listItem.style.backgroundImage = "none";
}

发生了什么变化?

您从未声明过

    var ul = document.createElement("ul");

我将假设这是全局变量并在此范围之外声明,否则您还有其他问题需要解决。

我已将以下代码(见下文)移到代码的下方。您试图在尚未添加到 DOM 的元素上使用 document.querySelector() 访问 DOM 元素。因此,您总是返回 null。

    var listItem = document.querySelector(".listItem");

我之前提出的这个过分引用仍然有效。

正如我在评论中提到的 listItemnull。这是因为 createListItem 尚未添加到 DOM 并且 .querySelector(..) 在调用函数时检查当前 DOM 树。

listItem 不需要存在,因为您正在操作并附加到 createListItem。因此,与其尝试将 .style.backgroundImage = ".." 分配给 listItem,不如将其添加到 createListItem:

if (data[i] && data[i].media[0] && data[i].media[0].url) {
    createListItem.style.backgroundImage = "url('"+data[i].media[0].url+"')";
} else {
    createListItem.style.backgroundImage = "none";
}

此外,如果 .listItem、CSS class 没有某种默认的 background-image,您可以省略上面的 else 子句,因为没必要:

if (data[i] && data[i].media[0] && data[i].media[0].url) {
    createListItem.style.backgroundImage = "url('"+data[i].media[0].url+"')";
}