2012-03-20 59 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