4

我是 jQuery 的新手。我有 2 个面板:如果我单击左侧面板中的图像,则该图像将出现在右侧面板中。我用克隆()来做,到目前为止我在这里。现在,当我单击它时,我希望删除右侧面板中的图像。并且摘要权重的计数(来自 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/

4

2 回答 2

4
$(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
    });
});

演示

于 2012-06-24T14:02:00.580 回答
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(){...});事件绑定,因为元素在移动到下一个列表后可能有不同的事件。

我已经在 jsFiddle 上设置了一个示例:http: //jsfiddle.net/XLSmU/17/

于 2012-06-24T13:58:55.323 回答