在jquery中替换链接的多个实例

时间:2011-07-09 17:28:37

标签: jquery jquery-selectors

我有一些列表项,其中包含一个div,其中包含一个链接。我想从所有div中删除此链接。这是我目前的职能:

jQuery('.post_meta').each(function(){
    var el = jQuery('.post_meta a');
    el.html(el.html().replace(/, Slider/ig, ""));
});

此函数复制一个div并将其内容添加到所有其他div。什么是正确的方式?

这是我的标记:

<ul>
     <li>
         <div class="post_meta">
         <a href="#">Anything</a>, <a href="#">Slider</a>, <a href="#">Anything2</a> 
         </div>
    </li>
</ul>

4 个答案:

答案 0 :(得分:1)

好像你想要这样的东西:

$('.post_meta a').filter(function() {
    return $.trim($(this).text()) === "Slider";
}).remove();

这会获取.post_meta元素中的所有链接,并根据其内容过滤它们(文本是否为Slider。然后删除这些元素。

参考: filtertrimremove

更新:关于您的评论。删除逗号有点棘手,但您可以这样做(删除链接后):

$('.post_meta').each(function(){
    $.each($(this).contents(), function() {
        if(this.nodeType === 3) {
            this.nodeValue = this.nodeValue.replace(/,\s*,/g, ',');
        }
    });
});

虽然可能不太高效......

更新2:显然删除逗号不起作用,因为在删除元素节点后,您有两个相邻的文本节点,而不是一个。

但这有效:

$('.post_meta').each(function(){
    var c = $(this).contents();
    $.each(c, function(i) {
        var prev = c[i-1];
        if(this.nodeType === 3 
           && prev 
           && prev.nodeType ===3
           && $.trim(this.nodeValue) === $.trim(prev.nodeValue)) {
            this.parentNode.removeChild(this);
        }
    });
});

DEMO

这基本上删除了重复的相邻文本节点。

为什么我这么复杂?

因为它看起来可能有链接的JavaScript事件处理程序,如果你得到并设置HTML,这些处理程序将丢失。

如果不是这种情况并且HTML真的是这样,你可以这样做:

jQuery('.post_meta').html(function(i, html) {
    return html.replace('<a href="#">Slider</a>,','');
});

DEMO 2

但如上所述,这只有在以下情况下才有效:(a)HTML与字符串完全匹配;(b)您没有将任何事件处理程序绑定到链接(它们将丢失)。

答案 1 :(得分:0)

你使用每个但不填写函数参数,应该是:

.each( function(index, Element) )

el是所有post_mpeta的所有链接

您可以删除以下链接:$(el).find('a').remove();(在每个循环中)

我不知道你在做什么替换HTML

答案 2 :(得分:0)

我认为你想要做的是:

$(".post_meta a").remove();

如果您想清除所有其他文字:

$(".post_meta").empty();

<强>更新

是否可以更改标记?我建议在你想要移除的锚点上添加一个类,例如:

<ul>
     <li>
         <div class="post_meta">
         <a href="#">Anything</a>, <a href="#" class="slider">Slider</a>, <a href="#">Anything2</a> 
         </div>
    </li>
</ul>

然后你可以这样做:

$(".post_meta a.slider").remove();

答案 3 :(得分:0)

然后执行此操作:

var temp = $(el).find('a');

var txtVal = temp.text();

if(txtVal == "Slider")
{
    temp.remove();
}