2015-08-05 4 views
0

Я пытаюсь удалить содержимое html всех нежелательных тегов и просто вернуть текст с основным форматированием (ul, b, u, p и т. Д.) Или просто текст (но сохранение новых строк, интервал и т. д.), однако у меня возникла проблема с созданием решения catch, которое позволит мне сохранить структуру содержимого, которое я вставлял.Удалите все ненужные теги из строки html, но сохраните пробелы в JS

Пример строки:

<p class="Bodytext" style="color: rgb(51, 51, 51);background-color: rgb(255, 255, 255);"> 
     <span lang="EN-GB">Hello 
      <span class="Apple-converted-space"> world,   </span> 
      <span class="Cross-reference"> 
       <a href="" style="color: rgb(66, 139, 202);background-color: transparent;">Cough 
       </a> 
      </span> 
      <span class="Apple-converted-space"></span>and 
      <span class="Apple-converted-space"></span> 
      <span class="Cross-reference"> 
       <a href="" style="color: rgb(66, 139, 202);background-color: transparent;">Feverish - risk assessment</a> 
      </span>. 
      <span class="Apple-converted-space"></span> 
     </span> 
    </p> 
    <p class="Bodytext" style="color: rgb(51, 51, 51);background-color: rgb(255, 255, 255);"> 
     <span lang="EN-GB">Fin.  </span> 
    </p> 
+0

Как получить только '.textContent' узла? https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent example: http://jsfiddle.net/gLrramna/ – pawel

ответ

0

Вот простой JavaScript решение, чтобы удалить все span элементы внутри HTML, но оставить их внутреннее содержание:

var span = document.getElementsByTagName('span'); 
while(span.length) { 
    var parent = span[ 0 ].parentNode; 
    while(span[ 0 ].firstChild) { 
     parent.insertBefore( span[ 0 ].firstChild, span[ 0 ]); 
    } 
    parent.removeChild(span[ 0 ]); 
} 

Вы также можете сделать это гораздо более просто используя jQuery, как показано в этом примере, который будет удалять теги span, а также p, b, ul, li теги, но оставить их inne Содержание г:

$("span, p, b, ul, li").contents().unwrap(); 

Смотрите также: Remove a HTML tag but keep the innerHtml

Это также может быть полезно отметить, что в любое время у вас есть два или более пробелов подряд, современный браузер, как правило, усечение их в одном пространстве, когда они показывают. Если вы хотите сохранить интервал в виде нескольких пробелов, я бы заменил набираемое на регулярной основе пространство «» с «&nbsp;» закодированными в HTML пространствами. Обычный JavaScript имеет метод замены строк, который вы можете использовать для этого, если это необходимо.

EDIT: Если вы хотите, чтобы удалить все HTML-теги в строке JavaScript, попробуйте следующее:

myString.replace(/<(?:.|\n)*?>/gm, ''); 

Смотрите также: Strip HTML from Text JavaScript

+0

эй я ценю ответ, но это не подходит, я только есть строка, а не дом, чтобы работать, поэтому я не могу просто захватить элементы и развернуть их. Также этот образец html содержит много прогонов да, но я желаю учесть любой тип элемента в своем парсере – alsco77

+0

См. Обновление. Дай мне знать, если это работает. – bwright

0

Единственное решение, которое я смог придумать это ...

'Name<br /><a href="something">here.</a>'.replace(/(<([^>]+)>)/ig,' ').replace(/\s{2,}/gi, ' ').trim()

Я не думаю, что это самый элегантный, но это, кажется, работает очень consis tently.

Смежные вопросы