2014-01-06 3 views
0

я хочу, чтобы удалить текст, между любым HTML тегами:Javascript регулярного выражения: удалить текст между HTML-тегами

пример:

<div> 
    <h1>Title</h1> 
</div> 

мой результатом вара должен быть:

<div> 
    <h1></h1> 
</div> 
+6

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Stephen

+6

Используйте DOM, серьезно. – elclanrs

+1

Если вы хотите изменить теги live на странице, просто установите их textContent empty. –

ответ

0

Доном Не используйте регулярное выражение. Используйте что-то вроде loadXMLDoc() для синтаксического анализа DOM и печати тегов вместо того, чтобы пытаться удалить значения из тегов.

+4

HTML недействителен XML. –

2

Javascript уже в состоянии сделать это с помощью встроенного в функции таким образом, что в концептуально превосходит регулярное выражение

<div> 
    <h1 id="foo">Title</h1> 
</div> 
<script> 
    document.getElementById("foo").textContent = "" 
</script> 
+4

'innerText' является нестандартным и не будет работать в браузерах, таких как Firefox. Это расширение IE, которое поддерживает Chrome для лучшей работы на сайтах IE. Может быть, вы имели в виду '.innerHTML' или' .textContent'? –

+0

Вы правы. Я пошел вперед и исправил это. – 16807

3

Vanilla JS К СПАСЕНИЯ

var x = document.getElementsByTagName("h1"); 
for (var i=0; i<x.length; i++) { 
    x[i].innerHTML = ""; 
} 

Просто вставить любой тег, который нужно например, wallah, нет необходимости в регулярном выражении или библиотеке 90kb.

2

Возможно, вы захотите сделать что-то подобное;

var elements = document.getElementsByTagName('*'); 
for(var i = 0; i < elements.length; i++) { 
    var element = elements[i]; 
    if(element.children.length === 0) { 
     elements[i].textContent = ''; 
    } 
} 

Это

  • находит все элементы
  • Loops через них
  • Удаляет все текстовое содержание

Docs:

Вы также можете сделать это Многоразовый как так

var removeAllText = function() { 
    var elements = document.getElementsByTagName('*'); 
    for(var i = 0; i < elements.length; i++) { 
     var element = elements[i]; 
     if(element.children.length === 0) { 
      elements[i].textContent = ''; 
     } 
    } 
} 

Тогда всякий раз, когда вы хотите, вы можете сделать это

removeAllText(); 
+0

Будет ли это внутри функции 'nukeThisPage()'? – Gary

+1

Да, или внутри 'if (! JQuery) {nukeThisPageYouHater()}';) – iConnor

+0

Это довольно бессмысленно с '*'; это эквивалентно 'document.documentElement.removeChild (document.head); document.documentElement.removeChild (document.body); ', обычно. – Ryan

5

Если, как ваш вопрос предлагает, вы хотите удалить все текст от любой HTML-теги ... только настоящий DOM собирается его отрезать.

function removeAllTextNodes(node) { 
    if (node.nodeType === 3) { 
     node.parentNode.removeChild(node); 
    } else if (node.childNodes) { 
     for (var i = node.childNodes.length; i--;) { 
      removeAllTextNodes(node.childNodes[i]); 
     } 
    } 
} 

Это, в отличие от textContent и innerHTML, сохранит все существующие структуры элементов на месте и удалить только текст.

Если у вас действительно есть строка и вы используете клиентский JavaScript в браузере, а строка представляет часть содержимого документа (а не весь документ - т. Е.вы не найдете каких-либо DTD, <html>, <head> или <body> элементы внутри), то вы можете просто разобрать его, поместив его в элемент:

var container = document.createElement("div"); 
container.innerHTML = htmlString; 
removeAllTextNodes(container); 
return container.innerHTML; 

В противном случае, вы, вероятно, хотите HTML анализатор для JavaScript , Регулярные выражения, как было отмечено, не очень хороши при анализе HTML.

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