Удалите все пробелы между тегами с помощью JavaScript
Я пытаюсь удалить пробел между тегами, чтобы дочерние коды содержали только те узлы тегов, а не узлы пробела. Вот мой код :
<li>
<label for="firstName" class="mainLabel">First Name : </label>
<input type="text" name="firstName" id="firstName"/>
<span>This must be filled</span>
</li>
и вот код JS:
var parentHTML = firstName.parentNode.innerHTML;
parentHTML = parentHTML.replace(/>n</g,"><");
firstName.parentNode.innerHTML = parentHTML;
но, когда я насторожился parentHTML Я получаю ту же самую старую строку.
5 ответов
это (нет, см. После правила), потому что строки неизменяемы, я думаю, и вы устанавливаете innerHTML родительского элемента точно такой же строкой, которую вы извлекли из него ранее.
вместо этого я бы предложил:
var firstname = document.getElementsByTagName('input')[0],
parentHTML = firstname.parentNode.innerHTML,
newHTML = parentHTML.replace(/\>\s+\</g,'');
firstname.parentNode.innerHTML = newHTML;
console.log(parentHTML, newHTML, (parentHTML == newHTML));
что касается комментария от jfriend00 (ниже), кажется, регулярное выражение было проблемой,\n не соответствуют образцу, в случае следующая поправка удовлетворяет требованиям teh:
var firstname = document.getElementsByTagName('input')[0],
parentHTML = firstName.parentNode.innerHTML;
parentHTML = parentHTML.replace(/>\s+</g, "><");
firstName.parentNode.innerHTML = parentHTML;
console.log(firstname, parentHTML);
ссылки:
только пробелы:
parentHTML = parentHTML.replace( new RegExp( "\>[ ]+\<" , "g" ) , "><" );
новая строка, вкладки и пробелы:
parentHTML = parentHTML.replace( new RegExp( "\>[\s]+\<" , "g" ) , "><" );
в большинстве случаев я рекомендую удалить пространство из:
- начало документа
- конец документа
- после
>символ - до
<символ
есть два случая, когда я могу думать, где это не будет делать то, что вы хотите, и это те же два случая, которые влияют на менее агрессивные решения выше.
пустое пространство между
inline-blockэлементов фактически предполагаемая или ожидаемая часть макета. Если это пространство свернуто до нуля символов, неявное пространство между элементами удаляется. Этого можно избежать, изменив мое регулярное выражение, чтобы заменить" ".мой оригинальный ответ был обновлен, чтобы сохранить пробелы в
<script>,<style>,<pre>или<textarea>теги. Все, кроме<pre>являются CDATA, что означает, что содержимое не является HTML и анализируется до тех пор, пока не будет найден закрывающий тег, который означает, что регулярное выражение является полным решением. Если a<pre>является вложенным илиwhite-spaceиспользуется свойство CSS, это не сохранит ваш контент.
решение:
collapsed = expanded.replace(/(<(pre|script|style|textarea)[^]+?<\/)|(^|>)\s+|\s+(?=<|$)/g, "");
можете ли вы рассматривать HTML-тег как строку в js? Думаю, это можно сделать. попробуйте это!
s.replace(/\s+/g, ' ');
я наткнулся на этот поток, потому что я искал решение для устранения пробелов вокруг divs, вызванных пробелами в источнике HTML или в моем случае.
прежде чем я понял, что белое пространство может вызвать эти пробелы, я сходил с ума, пытаясь избавиться от них. Я хочу, чтобы мой HTML-источник был отформатирован для удобства чтения, поэтому сжатие кода не является хорошим решением для меня. Даже если я обработал его таким образом, он не исправляет divs, которые генерируются Google и другими продавцы.
Я начал с создания следующей функции и вызова ее в body onload.
function Compress_Html() {
//Remove whitespace between html tags to prevent gaps between divs.
document.body.innerHTML = document.body.innerHTML.replace( /(^|>)\s+|\s+(?=<|$)/g, "" );
}
Это, казалось, работает отлично, но, к сожалению, он ломает окно поиска Google, которое у меня есть в нижнем колонтитуле.
после попытки многих вариантов шаблона regex без успеха, я нашел этот тестер regex в http://www.regexpal.com/. Насколько я могу судить, следующий шаблон делает то, что мне нужно.
( /(^|>)[ \n\t]+/g, ">" )
об этом сказал функция все еще ломала окно поиска. Поэтому я в конечном итоге переместил его в функцию jQuery document ready. Теперь он работает и не разбивает окно поиска.
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
$( document ).ready(function() {
document.body.innerHTML = document.body.innerHTML.replace( /(^|>)[ \n\t]+/g, ">" );
});
</script>