如何将html附加到所选元素后首次出现的字符串

时间:2010-03-23 18:29:54

标签: javascript jquery jquery-selectors

我有这样的HTML:

<div class=foo>
  (<a href=forum.example.com>forum</a>)
  <p>
  Some html here....
</div>

我想在第一个之后插入另一个链接,如下所示:

<div class=foo>
  (<a href=forum.example.com>forum</a>) <a href=blog.example.com>blog</a>
  <p>
  Some html here....
</div>

...但因为它包含在()中我无法使用:

$('div.foo a:first').append(' <a href=blog.example.com>blog</a>');

...将它放在)之前。

那么如何扩展我的jQuery选择以选择文字)或者我是否需要使用其他解决方案?

3 个答案:

答案 0 :(得分:2)

您可以匹配并替换整个(<a />)字符串,也可以在整个事物周围放置另一个元素(例如跨度)。

<span>(<a href=forum.example.com>forum</a>)</span>

Append也在现有锚点中插入新的锚标记。您可能会发现您正在寻找after()

答案 1 :(得分:1)

您是否可以选择下一个<p>代码并预先添加(实际上......使用before方法)链接?

$('div.foo a:first').next('<p>').before(' <a href=blog.example.com>blog</a>');

答案 2 :(得分:0)

永远不应该通过正则表达式修改XML / HTML(特别是不受信任/格式不正确),但如果你真的很绝望:

var container = $('div.foo');
var append = '<a href="...">...</a>';
var html = container.html();
var replaced = html.replace(/\(<a [^\)]+\)/, "$& " + append);
container.html(replaced);

请注意,如果a-tag中有“)”字符,则上述操作将失败。