剥离标签除了特定的标签

时间:2013-07-03 23:01:58

标签: javascript jquery html

我找不到与我的场景匹配的问题,并且由于某种原因无法解决这个问题... jQuery没问题,但原生(或angularJS / jQuery Lite)将是首选。

我有几个自定义标签的HTML。我想保留一些标签(它们是空的),但只保留所有其他标签。我不是直接操纵DOM - 我输入了一个HTML,需要输出HTML。 e.g:

<span class="ng-scope">CTAGCTCTCTGGAGATTAACGAGGAGAAATACTAGAtTGGTTCAT</span><start feat="1" class="ng-scope"></start><annotation index="1" class="ng-isolate-scope ng-scope" style="background-color: rgb(238, 153, 238); background-position: initial initial; background-repeat: initial initial;"><span tooltip="Another Promoter" tooltip-placement="mouse" tooltip-append-to-body="true" ng-transclude="" class="ng-scope"><span class="ng-scope">GATCATAAgcttgaat</span></span></annotation><end feat="1" class="ng-scope"></end><span class="ng-scope">tagccaaacttatt</span>

CTAGCTCTCTGGAGATTAACGAGGAGAAATACTAGAtTGGTTCAT <start feat="1"></start> GATCATAAgcttgaat <end feat="1"></end> tagccaaacttatt

白色空间并不重要。最终我会拉出开头和结尾,所以他们的形式不太重要(例如可能是&lt; 1&gt; xx)

由于

2 个答案:

答案 0 :(得分:0)

这样就可以在没有dom的情况下完成标记:

var str = IN.value;
var str2= str.replace(/\s*<(\/?)(\w+)([^>]*?)>\s*/g,  function(j,b,a,c){
  return   ({start:1, end:1}[a]) ?   ("<"+b+a+c+">")  : "";
});

var end='CTAGCTCTCTGGAGATTAACGAGGAGAAATACTAGAtTGGTTCAT<start feat="1" class="ng-scope"></start>GATCATAAgcttgaat<end feat="1" class="ng-scope"></end>tagccaaacttatt';

str2==end // true

我认为你并不真的想要/需要删除课程,因为你没有提到它。 如果你这样做,那么它会变得更复杂,但可能是可行的......

答案 1 :(得分:0)

HTML应该被解析为HTML,一旦你操纵了DOM元素,删除了你想要的东西等,你就可以把它作为字符串提取出来,如下所示:

var html = 'your HTML string here';

var markup = $.map($('<div />', {html:html}).children(), function(el) {
    return /(start|end)/.test(el.tagName.toLowerCase()) ? el.outerHTML : $(el).text();
}).join('');

FIDDLE