我需要删除值为<a>
的元素chatlink
之前和之后的所有内容(文本和其他元素)。
所有这一切,在每个元素<div>
中都有值类main
。
但仅当值为<div>
的{{1}}元素包含值为main
的链接时。
例如:
chatlink
最终代码:
<div class="main">
Bla bla bla :)
<a href="#" class="chatlink"><img src="#" /></a>
bla bla bla ...
<a href="#" class="chatlink"><img src="#" /></a>
tra la la la laaa
<a href="#" class="postlink">some text</a>
tralalaaa
</div>
有可能吗?
答案 0 :(得分:5)
更新:抱歉在开始时没有正确理解
使用以下代码:
为了便于阅读
$("div.main").each(function(){
var currentDiv = $(this);
var myLinks = $("a.chatlink", currentDiv);
currentDiv.html(myLinks);
})
快速没有中间变量
$("#btnClick").click(function(){
$("div.main").each(function(){
$(this).html($("a.chatlink", $(this)));
})
});
以下是已更新工作演示http://jsfiddle.net/Xxwt9/7/
答案 1 :(得分:4)
使用.main
在filter()
容器中搜索所有文本节点,并使用remove()
将其从容器或dom中删除。
$('div.main:has(.chatlink)').contents().filter(function(){
return this.nodeType == 3 || !$(this).hasClass('chatlink');
}).remove();
工作演示 - http://jsfiddle.net/ShankarSangoli/Amjaq/3/
请注意,我在$('.main')
上使用contents()方法,该方法获取匹配元素集中每个元素的子元素,包括文本和注释节点。如果您使用任何其他查找机制,则不考虑文本节点。
答案 2 :(得分:2)
有可能。我相信答案会像下面这样(虽然我可能会有点不对劲)
$("div.main").contents().not("a.chatlink").remove()
这假设它与您上面列出的一样,并且您要保留的所有标记都是div标记的直接子标记。它抓取div标签的所有子项,取消选择那些与chatlink类相关的子项,并从DOM中删除其余部分。
编辑:根据Shankar的修正从children()更改为contents()。
答案 3 :(得分:1)
答案 4 :(得分:1)
答案 5 :(得分:-1)
选择要保留的元素,分离它们,清空div,然后重新附加它们。
var chatlinks = $(".main a.chatlink").detach();
$(".main").empty().append(chatlinks);