篩選元素時,想從$(document)中直接去掉某一元素,使用$(document).not('#a')是無效的。
但要解決這類問題可以使用其它的方法,舉個例子
在模擬下拉列表時,想要實現的效果是點擊div,隱藏的列表出現,點擊任意的地方下拉列表消失
<div id="date">選擇日期</div>
<div id="content" style="display:none;">
<ul>
<li>2月1日</li>
</ul>
</div>
這個時候直接寫
$("#date").click(function(){
$("#content").slideDown();
});
$(document).click(function(){
$("#content").slideUp();
});
會出現點擊div時下拉列表先出現后消失的情況
解決這種問題大部分人最先想到的是
在設置document的點擊事件是去掉元素#date,即
$(document).not(‘#date’).click(function(){
$("#content").slideUp();
});
但not()在這里並不生效
這時就需要換一種思路
在點擊date的一瞬間content的高度變為1px,display變為block
所以
$(document).not(‘#date’).click(function(){
if($("#content").css('display') == 'block' && $("#content").css('height') != '1px'){
$("#content").slideUp();
}
});
就可以達到去掉元素#date的效果
另不想使用slideDown()的話
就必須通過增加一個變量記錄下拉列表的開閉狀態來達到相同的效果
總之其他的情況也可以通過類似的方式來解決題設的問題