2012-10-28 25 views
0

我有一個jQuery數據表,並在該數據表中每行都有一列,讓您查看該行的詳細信息。我不需要datatables row_details的東西。jquery做動作,除非div已經存在,然後替換

這個想法是,一旦點擊了「視圖」,文本就會變爲隱藏,並且帶有_ _ ###行的div被追加到內容主體。那麼,如果在該行顯示時單擊相同的按鈕,則會隱藏它。此外,如果某人點擊了另一行的視圖,則前一行文本應該變回隱藏狀態,隱藏div,並且應該顯示剛纔點擊過的那一行。

這是我到目前爲止有:

$("a[class^=view]").click(function() { 
    var id = $(this).attr('class').match(/\d{1,}/); 

    if($("div[id^=report_]").size() >= 1) { 
    // Slide up, remove 
      // Change text back to view  
    } else { 
      // Append and change text to Hide 
      } 
}); 

如果我單擊另一個「查看」,當針對一個細節已經表現出,它會將當前格內一個新的div並追加相同的新的div內容主體......顯然不是我所尋找的效果,所以我的邏輯錯誤。有任何想法嗎?

+1

你不應該使用'大小「,它已被棄用。使用'length'屬性,如'if($(「div [id^= report _]」)。length){...}' – elclanrs

+1

您可以用'/ \ d +替換'/ \ d {1,}//' –

+0

這是這樣的: 1)如果沒有元素存在,追加它並將文本改爲「隱藏」 2)如果單擊相同的「查看」鏈接,則刪除元素並將文本改回查看。 3)如果存在一個元素,刪除該元素並將其相關文本改回查看,同時附加一個新元素並更改其文本以隱藏。我得到了添加/刪除的東西,但是當我追加新的div時,它會被自動刪除,因爲它在相同的條件下檢查超過0個類的元素^ = report_ – Steve

回答

0

明白了。有點混亂,但它有效。有興趣的話,如果有另一種方式。這裏的解決方案:

$("a[class^=view]").click(function() { 
    var id = $(this).attr('class').match(/\d+/); 

    if($(this).text() == "Hide") { 
     $(this).text("View"); 
     $("#report").html(null); 
    } else { 
     $("a[class^=view_]").each(function(){$(this).text("View");}); 
     $(this).text("Hide"); 
     $("#report").html("<div id='report_"+id+"'>viewing report "+id+"</div>").slideDown(); 
    } 
}); 
+0

如果你想要刪除先前的按鈕,將需要更改之前按鈕的文本也被激活..可以添加一個'主動'類按鈕,並很容易找到前一個 – charlietfl

0

要知道,如果一個元素已經存在,我用的是父元素jQuery的發現,尋找他的孩子......像這樣:

if($('#parent_container').find('#child_element').length>0){ 
    //element(s) exists 
}else{ 
    //element(s) not found 
}