2013-07-03 85 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