【发布时间】:2020-01-30 03:27:53
【问题描述】:
我在使用“appendTo”代码多次移动同一个 div 时遇到问题。我想要做的是将#oldsection中的div列表附加到#newsection,在子类.movehere中一次添加两个
我使用 .slice(0,2). For some reason, using.sliceand.clone 一次移动两个 div 不能很好地协同工作。也许这不是正确的解决方案?我希望代码看起来像这样:
<div id="newsection">
<h3> ALL </h3>
<div id="all">
<div class="movehere">
<div class="blue all">A</div>
<div class="red all">B</div>
</div>
<div class="movehere">
<div class="blue all">C</div>
<div class="blue all">D</div>
</div>
<div class="movehere">
<div class="red all">E</div>
</div>
</div>
<h3> RED </h3>
<div id="red">
<div class="movehere">
<div class="red all">B</div>
<div class="red all">E</div>
</div>
</div>
<h3> BLUE </h3>
<div id="blue">
<div class="movehere">
<div class="blue all">A</div>
<div class="blue all">C</div>
</div>
<div class="movehere">
<div class="blue all">D</div>
</div>
</div>
</div>
<div id="oldsection"></div>
appendTo 'colored section' #blue,#red 和 'all section' #all 的代码正在工作,但当它们在一起时不起作用。
出于某种奇怪的原因,ALL 部分只显示了红色 div,但是当 //append colored section 和 .clone() 下的代码被删除时,红色和蓝色 div 又回来了,并且工作正常。
这是我当前的代码:请查看显示 //THIS CODE 的 cmets。这是我不能同时工作的两个代码。
<div id="newsection">
<h3> ALL </h3>
<div id="all">
<div class="movehere"></div>
<div class="movehere"></div>
<div class="movehere"></div>
</div>
<h3> RED </h3>
<div id="red">
<div class="movehere"></div>
</div>
<h3> BLUE </h3>
<div id="blue">
<div class="movehere"></div>
<div class="movehere"></div>
</div>
</div>
<div id="oldsection">
<div class="blue all">A</div>
<div class="red all">B</div>
<div class="blue all">C</div>
<div class="blue all">D</div>
<div class="red all">E</div>
</div>
$(document).ready(function() {
var $all = $('#all');
$('#oldsection div').each(function () {
//append colored sections
var classColor = $(this).attr('class').split(' ')[0];
var $moveClass = $('#newsection #' + classColor + " .movehere");
$moveClass.each(function () {
$('#oldsection .' + classColor).slice(0,2).appendTo($(this));
})
//append ALL sections
$("#newsection #all .movehere").each(function() {
var $div = $("#oldsection div");
$(this).append($div.clone().slice(0,2));
})
})
});
.blue { background-color: #76BAE4; }
.red {background-color: #F45E60; }
.movehere { margin: 5px auto;}
我得到了另一种形式的帮助:https://stackoverflow.com/a/58087168/519413。
【问题讨论】:
-
类永远不应该用于存储逻辑敏感数据。
$(this).attr('class').split(' ')[0]将在您决定向这些元素添加(预先添加)一个很酷的样式类时失败。使用特定的data-*属性,例如data-color="blue",并使用$(this).data('color');读取它 -
感谢您的建议 - 以后我会记住这一点。我为所有
#oldsection div添加了一个data-color 属性并将变量更改为var classColor = $(this).data('color');,但这个函数仍然对我不起作用。