ボタンのグループがあり、動的にボタンを追加しています。私の選択は次のようになります。
$elements = [a.midToggle, a.menuToggle, a.ui-crumbs]
この選択を既存のコントロールグループの前に追加したいと思います。
<div data-role="controlgroup" data-type="horizontal" class="dropZone">
<a href="#" class="some">Some</a>
<a href="#" class="midToggle">MidTog</a>
</div>
ただし、追加する前に、コントロールグループ内にすでにあるボタンを選択から削除したいと思います。そうしないと、ボタンが複数回存在するためです。
私はこのようにしようとしていますが、まったく機能しません:
// I have multiple controlgroups, so I need to add the buttons to all of them
$('.dropZone').each(function() {
var $first = $(this),
$buttons = $elements.clone();
$buttons.each(function() {
// check if class name on new button is already in controlgroup
if ( $(this).is(".midToggle") && $first.find(".midToggle").length > 0 ) {
$(this).remove();
}
if ( $(this).is(".menuToggle") && $first.find(".menuToggle").length > 0 ) {
$(this).remove();
}
if ( $(this).is(".ui-crumbs") && $first.find(".ui-crumbs").length > 0 ) {
$(this).remove();
}
});
// append what's left
$first.append( $buttons )
$ buttonは削除されていないと思いますが、それを機能させる方法がわかりません。また、私の3つのifステートメントは一種の不完全です。これを行うためのより良い方法はありますか?
編集:
各ボタンには複数のクラスがあるため、ソリューションを少し変更する必要がありました。そのため、attr('class')を単純にチェックすることはできません。これは完璧ではありませんが、機能します。
function clearOut($what) {
$buttons.each(function () {
if ($(this).is($what)) {
$buttons = $buttons.not($what)
}
});
}
// filter for existing buttons
// TODO: improve
if ($first.find('.midToggle')) {
clearOut('.midToggle');
}
if ($first.find('.menuToggle')) {
clearOut('.menuToggle');
}
if ($first.find('.ui-crumbs')) {
clearOut('.ui-crumbs');
}