2012-03-20 58 views
0

我有一個jQuery,每5秒觸發一次帶有實時更新的div。這工作正常。有時這些更新應該立即刪除。要刪除的唯一div - 通過jquery事件生成的div生成

jQuery的生成HTML這樣的:

<form> 

<div id="live1">Aha I love you too 
<input id="live1" type="hidden" value="1"><label id="livedel1">Delete 1</label> 
</div> 

<div id="live2">Thx man 
<input id="live2" type="hidden" value="2"><label id="livedel2">Delete 2</label> 
</div> 

</form> 

...等等。

我需要一些關於HTML和jQuery的幫助,如何發送/分離特定的id到jQuery,以便它可以被刪除,因爲我有點不在jQuery vals中。刪除不是問題,只是爲了讓jQuery抓住特定的id。

在HTML和jQuery中的建議是受歡迎的,上層的HTML可以更改爲xy代碼沒有問題。

+1

什麼是jQuery的瓦爾斯? 「我上HTML將要改變沒有問題」是什麼意思? – JJJ 2012-03-20 20:04:37

+0

刪除第一個元素,如:$('#live1')。remove();或者你在問別的嗎? – 2012-03-20 20:06:25

+0

@ Juhana ..這意味着我可以改變這個問題寫的HTML沒有問題,服從推薦的代碼。 @喬丹。我不知道如何在jQuery中可以說... – Xfile 2012-03-20 20:09:39

回答

2

首先,您有多個元素具有相同的編號。這不是有效的HTML,會導致你的問題。

如果你想刪除一個div單擊該標籤時,你可以這樣做:

<form> 

<div id="live1" class="live">Aha I love you too 
<input id="livehidden1" type="hidden" value="1"><label id="livedel1">Delete 1</label> 
</div> 

<div id="live2" class="live">Thx man 
<input id="livehidden2" type="hidden" value="2"><label id="livedel2">Delete 2</label> 
</div> 

</form> 

的jQuery:

$('.live').on('click', 'label', function() { 
    $(this).closest('.live').remove(); 
}); 

,關鍵是要解決您的ID是有效的,並向父元素添加類live。然後,您可以使用jQuery來搜索DOM並刪除父元素live。但是,從你的問題中很難判斷這是你真正想做的事情。

如果你不想從無效的ID一邊改變你的HTML,你需要做這樣的事情:

$('form').on('click', 'label', function() { 
    var num = $(this).attr('id').replace(/livedel/, ''); 
    $('#live'+num).remove(); 
}); 

這使得你的HTML可以從項目有所不同項目的假設。如果你的結構始終是相同的,你不必使用標識混亂,可以只使用.parent(),雖然因爲我的建議,這是不是很健壯

$('form').on('click', 'label', function() { 
    $(this).parent().remove(); 
}); 
+0

呀,類似我的回答數量從#live1,或#live2分離等,但** **好,因爲我的是一點點棄用:) – 2012-03-20 20:12:41

+0

只是爲了從該分區的混亂搶特定ID :)我認爲這會做:) – Xfile 2012-03-20 20:14:42

+0

從ID搶號,看到我的第二個例子。但是,我會傾向於第一個解決方案。它需要更少的計算,更強大,並且依賴於類和DOM結構,這是處理事情的最佳方式。 – 2012-03-20 20:17:22

1

你的問題是有些模糊,從而我現在正在假設你真正想要的東西。

根據您的HTML(可以改進),只要點擊標籤(「刪除」標籤),下列操作將刪除父元素(div)。

$(body).on('click', 'label', function() { 
    $(this).parent().remove(); 
}); 

這可以通過使用一類用於刪除的標籤,委託點擊事件到容器元件而不是主體等

隨着HTML這樣的(有些清潔器,IMHO可以極大地提高):

<div id="container"> 
    <div class="message"> 
     Aha I love you too 
     <label class="delete">Delete 1</label> 
    </div> 
    <div class="message"> 
     Thx man 
     <label class="delete">Delete 2</label> 
    </div> 
</div> 

上面的JavaScript可以由性能稍微更傻瓜證明:

$('#container').on('click', '.delete', function() { 
    $(this).closest('.message').remove(); 
}); 
1

如果我理解正確,您需要在調用click時刪除更新的頂級<DIV>。例如,你可以這樣做:

$('label.deleteTrigger').live(function(){ 
    $(this).parentUntil('div').remove(); 
}); 

,直到它找到(在我的例子div)指定的已選擇這將上去的祖先,從DOM將其刪除。你可以閱讀更多關於它here

此外,您需要在label中添加classdeleteTrigger,再次,在我的示例中),因此有一種方法可以識別觸發刪除的元素。

+0

請注意,從jQuery 1.7開始'.live()'已棄用。改用'.on()'。 – stpe 2012-03-20 20:16:51

+0

是的,我意識到這一點,但仍然習慣於這種方式:)謝謝! ;) – 2012-03-20 20:18:45