选择与链接直接相邻的标点符号,将其包裹在跨度中

时间:2010-06-20 06:56:41

标签: javascript jquery

想使用jQuery:

  1. 选择所有标点符号(表示. , ; : ' " “ ” { {1}} ‘等)直接在任何链接之前和之后发生,然后
  2. 将标点符号包裹在’ s。
  3. 因此:

    span

    成为这个:

    <div id="mydiv">
      Lorem ipsum
      <a href="#">dolor sit amet</a>,
      consectetur
      &ldquo;<a href="#">adipisicing elit</a>&rdquo;.
    </div>
    

    (顺便说一句,<div id="mydiv"> Lorem ipsum <a href="#">dolor sit amet</a><span>,</span> consectetur <span>&ldquo;</span><a href="#">adipisicing elit</a><span>&rdquo;.</span> </div> &ldquo是引号。)

    &rdquo;中的内容不固定。可能还存在与链接相邻的多个标点符号的情况(如上所述,div成为&rdquo;.

    非常感谢任何帮助!


    关于选择文本节点,

    对这个问题进行类似(但不完全)的排序? Using jQuery, how to modify text outside of tags?

2 个答案:

答案 0 :(得分:2)

这似乎有效:

试一试: http://jsfiddle.net/GutKg/1/

var $div = $('#mydiv');

var html = $div.html();

html = html.replace(/([^\s\w]+)<a/g, '<span>$1</span><a')
           .replace(/<\/a>([^\s\w]+)/g, '</a><span>$1</span>');

$div.html( html );​

编辑:已更新,以排除标记旁边的字母数字字符。

答案 1 :(得分:0)

稍微扩展一下我的问题:如果不是带有ID的单独的div,那么整个页面中有div的许多实例(比如类mydiv)?< / p>

<div class="mydiv">
  Lorem ipsum
  <a href="#">dolor sit amet</a>,
  consectetur
  &ldquo;<a href="#">adipisicing elit</a>&rdquo;.
</div>
<div class="mydiv">
  Ei vel <a href="#">velit mollis vivendo</a>.
</div>

在帕特里克的solution上拼凑出一些东西:

$('.mydiv').each(function () {
  html = $(this).html().replace(/([^\s\w]+)<a/g, '<span>$1</span><a')
                       .replace(/<\/a>([^\s\w]+)/g, '</a><span>$1</span>');
  $(this).html( html );
});

它有效 - http://jsfiddle.net/ZEC3X/ - 但我不知道,这是最有效/合乎逻辑的做法吗?