2013-07-03 52 views
0

我找不到与我的场景匹配的问题,并且由于某种原因无法弄清楚这个问题... jQuery没问题,但本机(或angularJS/jQuery Lite) 。去除特定标记除外的标记

我有几个自定义标记的HTML。我想保留一些标签(它们是空的),但只保留所有其他标签的文字。我没有直接操纵DOM - 我放入了一个HTML,并且需要退出HTML。例如: -

<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

空白并不重要。最后,我会拉出的开始和结束也,故其形式是不是太重要了(例如,可能是< 1> XX)

感谢

+0

为什么不操纵* A * DOM?应该可以将HTML解析为DOM片段,并用它们的'innerText'替换不需要的节点。 – millimoose

回答

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 

我想你不是真的想要/需要删除class attrib,因为你没有提到它。 如果你这样做的话,就变得更为复杂,但可能做的,能...

+0

最初的例子太设计了,看看新的例子是否更有意义? –

+0

[为什么不使用正则表达式来解析HTML?](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – adeneo

+0

@ adeneo:它没有' t需要解析,代码不是html,而且这不是解析器......我尽可能避免dom。 – dandavis

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