0

ボタンのグループがあり、動的にボタンを追加しています。私の選択は次のようになります。

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

2 に答える 2

1

私はあなたのコードを半分に叫びました:

$('.dropZone').each(function() {
    var $dropZone = $(this);
    var $buttons = $elements.clone();
    $buttons.each(function() {
        var $button = $(this);

        if ($dropZone.find('.' + $button.attr('class')).length) 
            $button.remove();
    });

    $dropZone.append($buttons);
});​
于 2012-04-15T16:50:09.413 に答える
0
$('.dropZone').each(function() {     
   $buttons = $elements.filter(function() {
       if ($('.'+this.className).length) return this;
   });
   $(this).append( $buttons );
});
于 2012-04-15T17:11:53.583 に答える