2013-04-05 47 views
0

我是jQuery的新手,我想這個問題已經回答了很多次。但我不能建議如何找到它。在寫jQuery代碼,我經常寫,重複選擇結構:jQuery:如果元素存在,如何做某事?

if($(".someclass .someclass #someid").filter(":visible")) 
{ 
    $(".someclass .someclass #someid").filter(":visible").click(); 
    // This must be executed only if element was found. 
    return; 
} 
// This must be executed only if first element not found 
if($(".someotherclass #someotherid").filter(":hidden")) 
{ 
    $(".someotherclass #someotherid").filter(":hidden").show(); 
    return; 
} 

正如你可以看到,選擇文本重複。是否有任何方法來重新使用「if()」中最後一個匹配選擇器的結果?例如,像:

if($(".someclass .someclass #someid").filter(":visible")) 
{ 
    $(":last-result").click(); 
    return; 
} 
if($(".someotherclass #someotherid").filter(":hidden")) 
{ 
    $(":last-result").show(); 
    return; 
} 
+0

這可能幫助:http://stackoverflow.com/questions/31044/is-there-an-exists-function-for-jquery – 2013-04-05 16:15:54

回答

2

只要不考,這不會對任何錯誤,如果沒有匹配的元素:

$(".someclass .someclass #someid:visible").click(); 

這是說,因爲你只能有一個與給定的id元素,你應該使用

$("#someid:visible").click(); 

現在,假設你真的想要做一個測試,然後你可以使用

$("#someid:visible").each(function(){ 
    var $element = $(this); 

    // use $element 

}); 

另一個基本的解決方案是在測試之前緩存的元素:

var $element = $("#someid"); 
if ($element.is(":visible")) { 
    // use $element 
} 
+0

這是我第一次並肩作戰:)。不幸的是,在很多情況下,我需要點擊/顯示/隱藏**和**執行其他操作。例如,在我的代碼示例中 - 從方法返回。或者寫點東西來記錄。管他呢。 – grigoryvp 2013-04-05 16:13:06

+0

目前還不清楚你想要什麼,但如果你使用每個都可以在大多數情況下使用'this'。 – 2013-04-05 16:13:41

+0

@凱文對不起,我無法理解。如果我將它添加到「單擊」後的下一行 - 它將在元素可見時執行**和如果元素不可見則執行。而且,通常的做法是「如果某些東西是可見的 - 隱藏並返回,比檢查是否有其他東西如果不可見,如果是這樣 - 顯示並返回,最後檢查一些元素是否有文本,如果是,清除並返回。 – grigoryvp 2013-04-05 16:16:03

1

如果你真的想要做的事只有在元素存在

$('element').length == 0; // no element found 

通過使用.length屬性我們可以測試是否一個元素存在,或者它是否在頁面中找到。

Read more