我是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>
答案 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
以及类似方法的工作方式。
关于重量计算:
id
属性作为数字。这不是他们的意图,有效的HTML元素id
至少包含一个字符。相反,请使用data-id
属性,并将其与.data()
一起使用。要计算列表中“权重”的数量,您可以使用.each
对其进行迭代并将金额相加,如下所示:
var weight = 0;
$('#selectlist img').each(function(){
weight += $(this).data("id");
});
然后,您可以从中创建一个函数,并在列表中的每次更改时重新计算权重。
.live("click", function(){...});
代替事件绑定,因为元素在移动到下一个列表后可能会有不同的事件。我在jsFiddle上设置了一个例子:http://jsfiddle.net/XLSmU/17/