为啥用 append() 复制图像?

Posted

技术标签:

【中文标题】为啥用 append() 复制图像?【英文标题】:Why are images duplicated with append()?为什么用 append() 复制图像? 【发布时间】:2015-12-22 15:07:24 【问题描述】:

单击“项目”时,我希望将多个图像附加到容器元素。 项目及其图像 URL 在 javascript 对象中定义。

如果我单击一个项目,它的图像会正确附加。但是,如果我关闭项目查看器并再次单击该项目,图像都会被复制。我认为这与append() 有关。

我做错了什么?

我在下面做了一个演示:

$(function() 

  var projects = 

    'project_1': 
      'title': 'EduTravel For Credit',
      'description': 'Innovative travel for credit.',
      'images': [
        'http://lorempixel.com/400/30/abstract/1/',
        'http://lorempixel.com/400/30/abstract/2/'
      ]
    

  

  var projectData = projects["project_1"];

  jQuery('button').on('click', function() 

    $.each(projectData.images, function(item) 
      $('#project-images').append('<span class="image_holder" style="background-image:url(' + projectData.images[item] + ');"></span>')
    );

    $('#project_images').html('');

  );

);
.image_holder 
  display: block;
  height: 30px;
  background-size: cover;
  margin: 0 0 5px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button>CLICK ME</button>

<div id="project-images"></div>

View the live website

【问题讨论】:

按F12学习使用你看到的东西,调试网站很容易 您能否在问题中包含相关的 javascript/html? 分享您的 html/javascript 代码,您将获得帮助 您似乎希望在每次加载新项目时清除#project-images。我在您的代码中看到$('#project_images').html('');,但它有一个下划线而不是连字符。此外,它您附加所有图像之后,而不是之前。 我试图澄清问题并添加了一个工作演示。如果您觉得我的修改不正确或不恰当,请随时回滚修改。 【参考方案1】:

从您网站上的源代码来看,您似乎试图在添加新图像之前从容器中删除图像:

$('#project_images').html('');

但是,该选择器使用下划线,而实际元素使用连字符:

<div id="project-images">

此外,您正在清除内容附加图像之后而不是之前。 我建议在添加新图像之前在容器上使用 jQuery 的 empty()

$(function() 

  var projects = 

    'project_1': 
      'images': [
        'http://lorempixel.com/400/30/abstract/1/',
        'http://lorempixel.com/400/30/abstract/2/'
      ]
    ,
    'project_2': 
      'images': [
        'http://lorempixel.com/400/30/abstract/3/',
        'http://lorempixel.com/400/30/abstract/4/'
      ]
    ,
    'project_3': 
      'images': [
        'http://lorempixel.com/400/30/abstract/5/',
        'http://lorempixel.com/400/30/abstract/6/'
      ]
    

  

  var projectData = projects["project_1"];

  jQuery('button').on('click', function() 
    
    var id=jQuery(this).data('id'),
        projectData=projects["project_"+id];

    $('#project-images').empty();
    
    $.each(projectData.images, function(item) 
      $('#project-images').append('<span class="image_holder" style="background-image:url(' + projectData.images[item] + ');"></span>')
    );

  );

);
.image_holder 
  display: block;
  height: 30px;
  background-size: cover;
  margin: 0 0 5px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button data-id="1">LOAD #1</button>
<button data-id="2">LOAD #2</button>
<button data-id="3">LOAD #3</button>

<div id="project-images"></div>

另一种方法是连接一串新图像,然后不使用append()设置容器的HTML:

$(function() 

  var projects = 

    'project_1': 
      'images': [
        'http://lorempixel.com/400/30/abstract/1/',
        'http://lorempixel.com/400/30/abstract/2/'
      ]
    ,
    'project_2': 
      'images': [
        'http://lorempixel.com/400/30/abstract/3/',
        'http://lorempixel.com/400/30/abstract/4/'
      ]
    ,
    'project_3': 
      'images': [
        'http://lorempixel.com/400/30/abstract/5/',
        'http://lorempixel.com/400/30/abstract/6/'
      ]
    

  

  var projectData = projects["project_1"];

  jQuery('button').on('click', function() 
    
    var id=jQuery(this).data('id'),
        projectData=projects["project_"+id],
        html_string='';
    
    $.each(projectData.images, function(item) 
      html_string+='<span class="image_holder" style="background-image:url(' + projectData.images[item] + ');"></span>';
    );
    
    $('#project-images').html(html_string);

  );

);
.image_holder 
  display: block;
  height: 30px;
  background-size: cover;
  margin: 0 0 5px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button data-id="1">LOAD #1</button>
<button data-id="2">LOAD #2</button>
<button data-id="3">LOAD #3</button>

<div id="project-images"></div>

【讨论】:

$('#project-images').empty('');这行得通,谢谢。对于没有正确格式化我的问题,我深表歉意。我对这一切都很陌生,我真的不明白你提到的任何意思。我正在尝试在线学习 javascript 教程,以便有一天我可以更好地理解。不过谢谢! 没问题。随时提出更多问题。继续编码!

以上是关于为啥用 append() 复制图像?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 append() 在 Python 中总是返回 None? [复制]

了解 QVector append() - 为啥它有条件地复制?

为啥 append 方法在我的列表中返回 None ? [复制]

为啥 list.append 在布尔上下文中评估为 false? [复制]

为啥 FormData 是空的? [复制]

为啥我不能对这个图像使用 getimagesize PHP? [复制]