我一直试图用单选按钮控制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>
如果有人能指出我正确的方向,让我知道这出错的地方,我真的很感激。
答案 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
的那个(有那个类)。