选择复选框时如何克隆元素
how to clone an element when choosing a checkbox
我有一个包含元素的页面
<div class="sample-area-wrapper border-bottom-block">
<div class="samples-items-wrapper">
<div class="sample-item-wrapper">
<img src="<?php echo $this->getViewFileUrl('Dv_BuildingBedPage::images/image1.png'); ?>" />
<div class="pretty p-default">
<input type="checkbox" />
<div class="state">
<label></label>
</div>
</div>
</div>
<div class="sample-item-wrapper">
<img src="<?php echo $this->getViewFileUrl('Dv_BuildingBedPage::images/image1.png'); ?>" />
<div class="pretty p-default">
<input type="checkbox" />
<div class="state">
<label></label>
</div>
</div>
</div>
</div>
</div>
<div class="selected-items"></div>
帮助实现功能。如果选择,
<input type="checkbox" />
复制 sample-item-wrapper
整个块并将其添加到
selected-items
淘汰赛和jquery
的适当实施
我试过了,但失败了。我一直在寻找更多尝试与我的代码集成的其他方法,但没有任何效果
<div class="selected">
</div>
<script>
require([
'jquery'
], function ($) {
'use strict';
$(":checkbox").change(function() {
var arr = $(":checkbox:checked").map(function() { return $(this).next().html(); }).get();
$(".selected").html(arr.join(', '));
});
function ToggleBGColour(item) {
var td = $(item).parent();
if (td.is('.rowSelected'))
td.removeClass("rowSelected");
else
td.addClass("rowSelected");
}
});
</script>
这项工作但添加了错误的元素来阻止
I tried this and it works but adds the wrong element:
var arr = $(":checkbox:checked").map(function() { return $(this).next().html(); }).get();
如果它选择了错误的元素,那么您需要将选择器更改为正确的元素:在 $(this).next().html()
中,this
是复选框,因此要获得 "whole of sample-item-wrapper",你需要:
$(this).closest(".sample-item-wrapper").html()
获取整个 sample-item-wrapper(不仅仅是它的内容)
$(":checkbox:checked").each(function() {
$(".selected").append($(this).closest(".sample-item-wrapper").clone());
});
没有 .clone
它将 移动 个现有元素。
您可以使用 closest
方法获取内容,只需使用 .html
将内容附加到所选部分。
您可以使用clone
方法获取整个元素。
编辑
您可以在此处向 div
添加一些标识符(例如 is),以从底部识别和删除所选项目。
由于您的情况此处没有标识符,我使用图像 URL 来唯一标识和删除复选框取消选中事件时的元素。
$('input[type="checkbox"]').click(function(){
if($(this).prop("checked") == true){
$(".selected-items").append(($(this).closest(".sample-item-wrapper").clone()))
}
else if($(this).prop("checked") == false){
var selected_item = $(this).closest(".sample-item-wrapper").attr('data-sample-id');
$("div.selected-items div[data-sample-id='"+selected_item+"']").remove()
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="sample-area-wrapper border-bottom-block">
<div class="samples-items-wrapper">
<div class="sample-item-wrapper" data-sample-id="sample-1">
<img src="https://i.picsum.photos/id/237/200/300.jpg" />
<div class="pretty p-default">
<input type="checkbox" />
<div class="state">
<label></label>
</div>
</div>
</div>
<div class="sample-item-wrapper" data-sample-id="sample-2">
<img src="https://i.picsum.photos/id/866/200/300.jpg" />
<div class="pretty p-default">
<input type="checkbox" />
<div class="state">
<label></label>
</div>
</div>
</div>
</div>
</div>
<div class="selected-items"></div>
我有一个包含元素的页面
<div class="sample-area-wrapper border-bottom-block">
<div class="samples-items-wrapper">
<div class="sample-item-wrapper">
<img src="<?php echo $this->getViewFileUrl('Dv_BuildingBedPage::images/image1.png'); ?>" />
<div class="pretty p-default">
<input type="checkbox" />
<div class="state">
<label></label>
</div>
</div>
</div>
<div class="sample-item-wrapper">
<img src="<?php echo $this->getViewFileUrl('Dv_BuildingBedPage::images/image1.png'); ?>" />
<div class="pretty p-default">
<input type="checkbox" />
<div class="state">
<label></label>
</div>
</div>
</div>
</div>
</div>
<div class="selected-items"></div>
帮助实现功能。如果选择,
<input type="checkbox" />
复制 sample-item-wrapper
整个块并将其添加到
selected-items
淘汰赛和jquery
的适当实施我试过了,但失败了。我一直在寻找更多尝试与我的代码集成的其他方法,但没有任何效果
<div class="selected">
</div>
<script>
require([
'jquery'
], function ($) {
'use strict';
$(":checkbox").change(function() {
var arr = $(":checkbox:checked").map(function() { return $(this).next().html(); }).get();
$(".selected").html(arr.join(', '));
});
function ToggleBGColour(item) {
var td = $(item).parent();
if (td.is('.rowSelected'))
td.removeClass("rowSelected");
else
td.addClass("rowSelected");
}
});
</script>
这项工作但添加了错误的元素来阻止
I tried this and it works but adds the wrong element:
var arr = $(":checkbox:checked").map(function() { return $(this).next().html(); }).get();
如果它选择了错误的元素,那么您需要将选择器更改为正确的元素:在 $(this).next().html()
中,this
是复选框,因此要获得 "whole of sample-item-wrapper",你需要:
$(this).closest(".sample-item-wrapper").html()
获取整个 sample-item-wrapper(不仅仅是它的内容)
$(":checkbox:checked").each(function() {
$(".selected").append($(this).closest(".sample-item-wrapper").clone());
});
没有 .clone
它将 移动 个现有元素。
您可以使用 closest
方法获取内容,只需使用 .html
将内容附加到所选部分。
您可以使用clone
方法获取整个元素。
编辑
您可以在此处向 div
添加一些标识符(例如 is),以从底部识别和删除所选项目。
由于您的情况此处没有标识符,我使用图像 URL 来唯一标识和删除复选框取消选中事件时的元素。
$('input[type="checkbox"]').click(function(){
if($(this).prop("checked") == true){
$(".selected-items").append(($(this).closest(".sample-item-wrapper").clone()))
}
else if($(this).prop("checked") == false){
var selected_item = $(this).closest(".sample-item-wrapper").attr('data-sample-id');
$("div.selected-items div[data-sample-id='"+selected_item+"']").remove()
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="sample-area-wrapper border-bottom-block">
<div class="samples-items-wrapper">
<div class="sample-item-wrapper" data-sample-id="sample-1">
<img src="https://i.picsum.photos/id/237/200/300.jpg" />
<div class="pretty p-default">
<input type="checkbox" />
<div class="state">
<label></label>
</div>
</div>
</div>
<div class="sample-item-wrapper" data-sample-id="sample-2">
<img src="https://i.picsum.photos/id/866/200/300.jpg" />
<div class="pretty p-default">
<input type="checkbox" />
<div class="state">
<label></label>
</div>
</div>
</div>
</div>
</div>
<div class="selected-items"></div>