2012-04-15 16 views
0

私は、動的にボタンを追加するボタンのグループを持っています。私は既存のcontrolgroupにこの選択を付加したい別の要素に追加する前にJquery/Javascriptを使用して選択から要素を削除する方法はありますか?

$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> 

はしかし前に付ける前に、私は私の選択からcontrolgroupの内側にすでにボタンを削除したいですさもなければ彼らはそこに何度もいるでしょうから。

私はこのようにしようとしているが、それは全く動作しません:

// 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) 

私は私の$ボタンを把握は削除されませんが、私はそれを取得する方法がわかりません作業。また、私の3つのif文は色あせています。これを行うより良い方法はありますか?

EDIT:
私は各ボタンは複数のクラスを持っているため、ソリューションを少しmodifiyしなければならなかったので、私は単にのattr(「クラス」)をチェックすることはできません。これは完璧ではありませんが、動作します:

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'); 
    } 
+0

なぜそこにそれらすべてを維持しないと、単に '非表示()'/'ショー()彼ら? –

+0

@lila G:それについても考えましたが、そこには私のいるページによって絶えず変化するボタンがあるかもしれません。上記3つは一定です。たぶんこのことをもっと考えなければならないでしょう。 – frequent

+0

まず、controls要素からすべてのボタンを削除して、好きなボタンを追加する方がやや簡単です。 –

答えて

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); 
});​ 
+0

ああ。これはよさそうだ。試してみる。 – frequent

+0

@frequent。それは私を悩ます代表点ではない。私は人々がなぜそれをupvoteなしで答えを受け入れるのか不思議です。とにかく私は助けてうれしかった。 – gdoron

+0

あなたはポイントがあります。また、私の答えは – frequent

0
$('.dropZone').each(function() {  
    $buttons = $elements.filter(function() { 
     if ($('.'+this.className).length) return this; 
    }); 
    $(this).append($buttons); 
});