jQuery-替换链接内部的部分文本

jQuery-替换链接内部的部分文本,jquery,hyperlink,replacewith,Jquery,Hyperlink,Replacewith,我试图用图像替换该页面上所有链接的前5个字母中包含OFN的前5个字母,以替换OFN文本,但希望保留其余的链接文本 这是我目前正在使用的 $(document).ready(function() { $("a:contains('#OFN#')").each(function() { var calSubject = $(this).text().substring(5); $(this).replaceWith("<img src='/images/

我试图用图像替换该页面上所有链接的前5个字母中包含OFN的前5个字母,以替换OFN文本,但希望保留其余的链接文本

这是我目前正在使用的

$(document).ready(function() {
    $("a:contains('#OFN#')").each(function() {
        var calSubject = $(this).text().substring(5);
        $(this).replaceWith("<img src='/images/ofn_bullet.gif' width='10' height='10' style='width: 10px; height: 10px; border: none;' />" + calSubject);
    });
});
但这种方法完全从文本中删除标记。如何在不删除标记的情况下执行此操作

以下是链接的HTML示例:

<a href="#" onclick="eventDisplay('980','4/18/2013')">#OFN# 2013 Midwest Regional Meeting</a>
我试过使用。儿童,但这似乎也不起作用。我做错了什么?

使用而不是替换。看看这把小提琴:

replaceWith将替换调用它的元素,这解释了您描述的行为。通过使用$.fn.html,您将替换锚标记内的所有内容

使用html方法将代码放入链接中,而不是替换它:

$(this).html("<img src='/images/ofn_bullet.gif' width='10' height='10' style='width: 10px; height: 10px; border: none;' />" + calSubject);

选择文本节点并更新它们


我会做一些更详细的事情:

var regex = /^#0FN#/;
$("a").each(function() {
    var $this = $(this), html = $this.html();
    if (regex.test(html)) {
        html.replace(/#0FN#/, "image stuff");
        $this.html(html);
    }
});

这对我来说似乎更清楚:

<a href="#" class="ofn" onclick="eventDisplay('980','4/18/2013')">
    <span>2013 Midwest Regional Meeting</span>
</a>
除非你必须按照你的方式去做,因为一些你没有告诉我们的原因


如果eventDisplay的参数始终相同,您也可以将onlick从a标记移动到javascript。

$this.replaceWith在这行中,您正在替换锚定标记,而不是应该替换锚定标记的文本。谢谢,是的,我完全选错了。是的,只是将其更改为this,然后砰!完美的我认为你用边框来表示图像,而不是边框如果你的目标是去除图片周围的蓝色边框,那么我认为它是边框而不是边框。虽然不是100%确定,但很长时间我没有这么做。谢谢,你的方法是最好的,依我看。太棒了!
<a href="#" class="ofn" onclick="eventDisplay('980','4/18/2013')">
    <span>2013 Midwest Regional Meeting</span>
</a>
$(document).ready(function() {
    $('a.ofn').prepend('<img class="icon" src="/images/ofn_bullet.gif" />');
});
a.ofn .icon {
   width: 10px;
   height: 10px;
   border: none; /* Actually i think you mean outline rather than border */
}