【发布时间】:2018-04-06 00:49:24
【问题描述】:
如何使用 jquery 选择器排除特定元素?在这个例子中,我可以按任何顺序添加尽可能多的水和种子,但是当我单击太阳按钮时,所有的水都应该消失,但种子应该保留。当我点击月亮按钮时,水应该会再次出现,而种子未受影响。我尝试过滤掉任何带有“span”标签的元素。我尝试了 .not('span') 功能,但没有成功。如何使用 jquery 选择器排除包含“span”标签的元素? TIA
$("#water").click(function(){$("#garden").append('<div>water</div>');});
$("#seed").click(function(){$("#garden").append('<span><div>seed</div></span>');});
$("#sun").click(function(){$("#garden div").not('span').addClass('vapor');});
$("#moon").click(function(){$("#garden div").not('span').removeClass('vapor');});
div.vapor{display:none;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button id='water'>water</button>
<button id='seed'>seed</button>
<button id='sun'>sun</button>
<button id='moon'>moon</button>
<div id='garden'></div>
这是第二个例子,说明为什么它必须是标记而不是使用类。请注意,我在此示例中使用了“选择”和“选项”,并且浏览器不完全支持使用 CSS 隐藏选项。我对这个例子的问题是,如果我点击“太阳”按钮 10 次,我必须点击“月亮”按钮 10 次才能显示水。我需要在“sun”按钮上使用标签排除,这样它就不会在“water”选项上多次包裹“span”。我想要实现的是,无论我点击多少次“太阳”按钮,我只需要点击一次月亮按钮,水就会再次出现。谢谢你
$("#water").click(function(){$("#garden").append('<option class="water">water</option>');});
$("#seed").click(function(){$("#garden").append('<option>seed</option>');});
$("#sun").click(function(){$("#garden option.water").wrap('<span>');});
$("#moon").click(function(){$("#garden span option.water").unwrap();});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button id='water'>water</button>
<button id='seed'>seed</button>
<button id='sun'>sun</button>
<button id='moon'>moon</button>
<select id='garden'><option></option></select>
【问题讨论】:
-
如果你附加的水和种子有自己的类,解决你的问题会容易得多
-
@j08691,是的,我完全理解,但在某些情况下,使用类对于浏览器兼容性并不实用,需要使用标签。谢谢你的建议。
-
“使用类对于浏览器的兼容性是不切实际的,需要使用标签” 我认为在我多年的编码中我从未听说过或经历过这样的事情
-
@j08691 我举了第二个例子来说明为什么有时类对于浏览器兼容性并不实用,并且需要标记。在 select 中隐藏某些选项的最佳方法是用标签包装它,以实现浏览器兼容性。我仍然需要排除'span'标签以避免'sun'按钮在多次单击时多次执行。我可能是错的,但我希望你能理解。谢谢
标签: jquery jquery-selectors filtering