2012-04-15 83 views
0

我有一组按钮,我正在为动态添加按钮。我的选择会是这个样子:如何在追加到另一个元素之前使用Jquery/Javascript从选择中删除元素?

$elements = [a.midToggle, a.menuToggle, a.ui-crumbs] 

我想这个选择预先考虑到现有controlgroup:

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

我认为我的$按钮不会被删除,但我不知道如何得到它工作。我的三个if语句也有些蹩脚。有一个更好的方法吗?

编辑:
我不得不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

为什么不能让他们都在那里,只是'隐藏()'/'显示() “他们? – 2012-04-15 16:35:01

+0

@lila G:也想过这个,但是那里可能会有按钮,这些按钮会随着我在哪个页面而不断变化。以上三点是不变的。也许应该给这个更多的想法。 – frequent 2012-04-15 16:41:04

+0

首先从控件元素中删除所有按钮,然后只需添加任何你想要的按钮,会比较容易... – 2012-04-15 16:49:53

回答

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 2012-04-15 16:54:58

+0

@频繁。这不是困扰我的重要问题。我只是好奇,为什么人们不接受答案而不接受答案。无论如何,我很乐意提供帮助。 – gdoron 2012-04-15 17:09:30

+0

你有一点。另请参阅我的回答 – frequent 2012-04-15 17:11:32

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