я хочу, чтобы удалить текст, между любым HTML тегами:Javascript регулярного выражения: удалить текст между HTML-тегами
пример:
<div>
<h1>Title</h1>
</div>
мой результатом вара должен быть:
<div>
<h1></h1>
</div>
я хочу, чтобы удалить текст, между любым HTML тегами:Javascript регулярного выражения: удалить текст между HTML-тегами
пример:
<div>
<h1>Title</h1>
</div>
мой результатом вара должен быть:
<div>
<h1></h1>
</div>
Доном Не используйте регулярное выражение. Используйте что-то вроде loadXMLDoc() для синтаксического анализа DOM и печати тегов вместо того, чтобы пытаться удалить значения из тегов.
HTML недействителен XML. –
Javascript уже в состоянии сделать это с помощью встроенного в функции таким образом, что в концептуально превосходит регулярное выражение
<div>
<h1 id="foo">Title</h1>
</div>
<script>
document.getElementById("foo").textContent = ""
</script>
'innerText' является нестандартным и не будет работать в браузерах, таких как Firefox. Это расширение IE, которое поддерживает Chrome для лучшей работы на сайтах IE. Может быть, вы имели в виду '.innerHTML' или' .textContent'? –
Вы правы. Я пошел вперед и исправил это. – 16807
Vanilla JS К СПАСЕНИЯ
var x = document.getElementsByTagName("h1");
for (var i=0; i<x.length; i++) {
x[i].innerHTML = "";
}
Просто вставить любой тег, который нужно например, wallah, нет необходимости в регулярном выражении или библиотеке 90kb.
Возможно, вы захотите сделать что-то подобное;
var elements = document.getElementsByTagName('*');
for(var i = 0; i < elements.length; i++) {
var element = elements[i];
if(element.children.length === 0) {
elements[i].textContent = '';
}
}
Это
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();
Будет ли это внутри функции 'nukeThisPage()'? – Gary
Да, или внутри 'if (! JQuery) {nukeThisPageYouHater()}';) – iConnor
Это довольно бессмысленно с '*'; это эквивалентно 'document.documentElement.removeChild (document.head); document.documentElement.removeChild (document.body); ', обычно. – Ryan
Если, как ваш вопрос предлагает, вы хотите удалить все текст от любой 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.
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Stephen
Используйте DOM, серьезно. – elclanrs
Если вы хотите изменить теги live на странице, просто установите их textContent empty. –