使用Javascript用<sup>标签包装所有标记,除非它们已经有<sup>标记</sup> </sup>

时间:2014-11-24 23:50:25

标签: javascript jquery

提前谢谢。

我正在使用

  $(document).ready(function() {
           $("body").html(
    $("body").html().replace(/&reg;/gi, '<sup>&reg;</sup>').replace(/®/gi, '<sup>&reg;</sup>')
   );
        });

在标记周围添加下标,但是如果®标记已经具有&lt; sup> &LT; / up&gt;标签,它是两次添加上标。任何人都可以帮我添加支票,如果它已经存在那么停止吗?

更新:: 我最终使用此代码,因为下面的答案干扰了我的其他javascript。

 $(document).ready(function() {
   $("p,h1,h2,h3,h4, td").each(function(){
     $(this).html($(this).html().replace(/&reg;/gi, '<sup>&reg;</sup>').replace(/®/gi, '<sup>&reg;       
      </sup>').replace('<sup><sup>', '<sup>').replace('</sup></sup>', '</sup>'));
   });
 });

5 个答案:

答案 0 :(得分:3)

你想要这个:

$("body").html(
  $("body").html()
    .replace(/((?!<sup>\s*))&reg;((?!\s*<\/sup>))/gi, '<sup>&reg;</sup>') // wrap &reg; if not wrapped yet
    .replace(/((?!<sup>\s*))®((?!\s*<\/sup>))/gi, '<sup>&reg;</sup>') // wrap ® if not wrapped yet
);

<强>解释

而不是做其他人提出的建议并删除重复项后,您可以在正则表达式本身中为包装标记构建测试。

例如,此正则表达式仅在未被SUP标记包围时才查找字符(实体):

/((?!<sup>\s*))®((?!\s*<\/sup>))/gi/((?!<sup>\s*))&reg;((?!\s*<\/sup>))/gi

JsFiddle演示:http://jsfiddle.net/co3sy5zo/

Runnable Snippet :(使用原生javascript代替jQuery)

document.body.innerHTML = 
  document.body.innerHTML
    .replace(/((?!<sup>\s*))&reg;((?!\s*<\/sup>))/gi, '<sup>&reg;</sup>')
    .replace(/((?!<sup>\s*))®((?!\s*<\/sup>))/gi, '<sup>&reg;</sup>');
<sup>&reg;</sup>
&reg;
<sup>®</sup>
®
<sup> &reg; </sup>
<sup> ® </sup>
<sup>
   &reg; 
</sup>
<sup> ® 
</sup>
"Buy more Emo&reg; Jeans!"

答案 1 :(得分:0)

有更有效的方法可以做到这一点,但最简单的方法就是:

$(document).ready(function() {
   $("body").html(
       $("body").html().replace(/&reg;/gi, '<sup>&reg;</sup>').replace(/®/gi, '<sup>&reg;</sup>').replace('<sup><sup>','<sup>').replace('</sup></sup>','</sup>');
   );
});

答案 2 :(得分:0)

添加更多替换

$("body").html().replace(/&reg;/gi, '<sup>&reg;</sup>').replace(/®/gi, '<sup>&reg;</sup>').replace('<sup><sup>', '<sup>').replace('</sup></sup>', '</sup>')

答案 3 :(得分:0)

不使用正则表达式解决方案,您可以将replace语句包装在另一个替换语句中,该语句将<sup><sup>替换为<sup>,将</sup></sup>替换为</sup>

另一种方法是搜索&reg;之前或之后的空格,假设在没有标记的情况下会有空格。

答案 4 :(得分:0)

你需要找到带有“sup”的“sup”,然后将父sup设置为html的“®”

$(document).ready(function() {
  $("body").html(
  $("body").html().replace(/&reg;/gi, '<sup>&reg;</sup>').replace(/®/gi, '<sup>&reg;</sup>')); // this will break in script tags and a few other places.
  $("sup sup").each(function () {  // find sup with child sup
      $(this).parent("sup").html("&reg;"); 
  });
 });

这适用于原始文件在reg“®

周围有空格的情况