如何定位列表中的所有元素,除了包含带有jquery的trigger元素的li

时间:2012-02-20 19:00:41

标签: jquery

我一直试图用单选按钮控制ul。当一个按钮被选中时,我想要所有的li,除了最终(其他)li和包含已检查单选按钮的li消失。我觉得我很接近,但我无法弄清楚如何排除被检查的单选按钮的li被隐藏。我的猜测是.not(this).parent('li')部分并没有针对正确的元素,但我无法确定它应该是什么。这是我到目前为止所做的javascript。

$('input.addressradio').change(function(){ 
  $(this).parents('ul.address').find('li').not(this).parent("li").hide();   
  $(this).parents('ul.address').find('li.allbutonetarget').show();
    return false;
}); 

以下是我希望它支持的HTML。

<ul class="address collectionaddressnewhideY">
<li>
<input value="saved1" type="radio" class="include oneofmanyfieldset addressradio" name="collectionaddressradio" id="collectionaddressradiosaved1"></input>
<span class="collectionaddresssaved1 savedaddress">
</span>
</li>
 <li>
 <input value="saved2" type="radio" class="include oneofmanyfieldset addressradio" name="collectionaddressradio" id="collectionaddressradiosaved2"></input>
<span class="collectionaddresssaved2 savedaddress">
</span>
</li>
<li><input value="saved3" type="radio" class="include oneofmanyfieldset addressradio" name="collectionaddressradio" id="collectionaddressradiosaved3"></input>
<span class="collectionaddresssaved3 savedaddress">
</span>
</li>
<li class="allbutonetarget"><input value="other" type="radio" class="include oneofmanyfieldset addressradio" name="collectionaddressradio" id="collectionaddressradioother">Other </input>
<span>
</span>
</li>
</ul>

如果有人能指出我正确的方向,让我知道这出错的地方,我真的很感激。

5 个答案:

答案 0 :(得分:0)

.not()函数可以使用DOM元素或包含要测试的DOM元素的jQuery对象。如果您要排除this的父级,那么您希望将$(this).parent()传递给.not()函数,如下所示:

$('input.addressradio').change(function(){ 
  $(this).parents('ul.address').find('li').not($(this).parent("li")).hide();   
  $(this).parents('ul.address').find('li.allbutonetarget').show();
    return false;
}); 

要详细了解代码出错的原因,您获得了一组<li>元素,然后尝试排除this<input>元素,因此永远不会在原始集合中)而不是this的父元素(它是<li>元素,并且可能在原始集合中)来自该集合。由于所有元素都不匹配this(它们怎么可能?它们的类型不同),整个集合都是通过调用.not()返回的,并且它们都被隐藏了。

答案 1 :(得分:0)

$('input.addressradio').on('change', function(){ 
  $(this).parent().siblings('li').not(this).not('.allbutonetarget').hide();   
}); ​

答案 2 :(得分:0)

您不会从单选按钮中排除此项,而是从li s:

中排除
$(this).parents('ul.address').find('li').not(this).parent("li").hide()

你应该首先找到所有无线电,然后将其排除,然后找到他们的父母:

$(this).parents('ul.address').find('.addressradio').not(this).parent("li").hide()

答案 3 :(得分:0)

这个怎么样:

$('input.addressradio').click(function(){
    $('li').hide();
    $(this).parent().show();
    $('input[value="other"]').parent().show();
})

jsFiddle 示例。

答案 4 :(得分:0)

$('input.addressradio').change(function() {
    $(this).parent().siblings('li').not('.allbutonetarget').hide();
    return false;//keeps this one from being checked? you want that?
});
  • li是父标记兄弟选择器。
  • .not()排除 来自.hide的那个(有那个类)。
  • 一个人 目前检查过的电台被排除在外。它不是兄弟姐妹 本身就是定义。