删除元素前后的文本和其他元素

时间:2012-03-09 16:48:34

标签: javascript jquery

我需要删除值为<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>

有可能吗?

6 个答案:

答案 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)

使用.mainfilter()容器中搜索所有文本节点,并使用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)

简单方法

var links=$('.main a')​;
$('.main').html(links);

Here是一个小提琴。

答案 4 :(得分:1)

此:

$( '.main' ).contents().remove( ':not(.chatlink)' );

现场演示: http://jsfiddle.net/wrUuw/

答案 5 :(得分:-1)

选择要保留的元素,分离它们,清空div,然后重新附加它们。

var chatlinks = $(".main a.chatlink").detach();
$(".main").empty().append(chatlinks);