我找不到与我的场景匹配的问题,并且由于某种原因无法解决这个问题... 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)
由于
答案 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('');