jQuery:添加和删除图像

时间:2012-06-24 13:53:44

标签: jquery image add

我是jQuery的新手。 我有2个面板:如果我点击左侧面板中的图像,则该图像将出现在右侧面板中。我用clone()来做,到目前为止我在这里。现在,当我点击它时,我希望删除右侧面板中的图像。汇总权重(来自img id)将取决于我是否在右侧面板中添加或删除图像。有人可以帮助我。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>test</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="script/jquery-1.7.2.min.js"></script>
<style type="text/css">
#output, #selectList { 
      width: 202px; 
      border: 1px solid #000; 
      margin: 2px; 
      height: 400px; 
      float: left 
 }
</style>
</head>
<body>

summary weight: <div id="sumcount"></div>kg<br />
<div id="selectList">
    <img id="34" src="http://placekitten.com/80/80" />
    <img id="21" src="http://placekitten.com/81/81" />
    <img id="11" src="http://placekitten.com/g/80/80" />
    <img id="5" src="http://placekitten.com/g/81/81" />
    <img id="9" src="http://placekitten.com/g/82/82" />
</div>
<div id="output">
</div>

<script type="text/javascript">
$(function(){
    var output = $('#output');
    //$('#selectList img').each(function(i, el){
    //        $(this).addClass('img' + i);
    //    });
    $('#selectList img').click(function(){
        output.append($(this).clone());
    });
    // dont work
    $('#output img').click(function(){
        output.remove($(this));
    });

});
</script>
</body>
</html>

演示: http://jsfiddle.net/XLSmU/

2 个答案:

答案 0 :(得分:3)

$(function() {
    var output = $('#output'),
        sumWeight = 0;

    $('#selectlist img').click(function() {
        var imageClone = $(this).clone();
        output.append(imageClone);
        sumWeight += parseInt( this.id, 10); // getting weight from image id
        $('#sumcount').text(sumWeight); /// updating the total weight
    });

    // for removing image from #output
    // you need delegate event, because images are added dynamically

    output.on('click', 'img', function() {
        var image = $(this),
            weight = parseInt( this.id, 10 ); // getting id of remove image
        sumWeight -= weight; // subtract weight from total
        image.remove();  // remove the image
        $('#sumcount').text(sumWeight); // updating the total weight
    });
});

<强> DEMO

答案 1 :(得分:0)

而不是.clone(),只需传递元素本身 - $(this)。因此,您最终得到output.append($(this));,而不是将元素克隆到右侧列表,将移动它。这就是.append以及类似方法的工作方式。

关于重量计算:

  1. 不要仅使用id属性作为数字。这不是他们的意图,有效的HTML元素id至少包含一个字符。相反,请使用data-id属性,并将其与.data()一起使用。
  2. 要计算列表中“权重”的数量,您可以使用.each对其进行迭代并将金额相加,如下所示:

    var weight = 0;
    $('#selectlist img').each(function(){
         weight += $(this).data("id");
    });
    
  3. 然后,您可以从中创建一个函数,并在列表中的每次更改时重新计算权重。

  4. 您还应该考虑到,在将元素移动到右侧列表后,它仍然附加了所有事件。如果你使事件更加通用,而不是依赖于他们当前所在的列表,那就没问题;但除此之外,您应该使用.live("click", function(){...});代替事件绑定,因为元素在移动到下一个列表后可能会有不同的事件。
  5. 我在jsFiddle上设置了一个例子:http://jsfiddle.net/XLSmU/17/