Вы действительно должны следить с regex/.replace
подходит к этой проблеме: легко заменить все тексты, которые вы не хотите касаться.
Подход, который может быть немного «безопаснее»:
- Найдите
<span>
вы хотите удалить.
- Найдите свой родительский элемент.
- Проверьте, если он окружен текстовыми узлами (
nodeType == 3
)
- Если есть текстовый узел перед
<span>
вы удаляете, обрезать белое пространство конца своего nodeValue
.
- Если после элемента есть текстовый узел, обрезайте пробел в начале.
Тем не менее, я не верю, что вы обрабатываете свой HTML-код и удаляете материал, это будет очень перспективным ... Небольшие изменения в содержании вызовут новые проблемы.
В качестве примера (написаны, чтобы быть ясно, а не кратким):
var spanToRemove = document.querySelector(".nestedSpan");
var spanParent = spanToRemove.parentElement;
var childNodes = spanParent.childNodes;
var childNodesArray = [];
for (var i = 0; i < childNodes.length; i += 1) {
childNodesArray.push(childNodes[i]);
}
var spanIndex = childNodesArray.indexOf(spanToRemove);
var textBefore = childNodes[spanIndex - 1];
var textAfter = childNodes[spanIndex + 1];
if (textBefore && textBefore.nodeType == 3) {
// Trims both ends, would be better to just trim right end
textBefore.nodeValue = textBefore.nodeValue.trim();
}
if (textAfter && textAfter.nodeType == 3) {
// Trims both ends, would be better to just trim left end
textAfter.nodeValue = textAfter.nodeValue.trim();
}
spanParent.removeChild(spanToRemove);
<p>Text before <span class="nestedSpan"> This gets removed </span> , Text after</p>
Дубликат: http://stackoverflow.com/questions/1981349/regex-to-replace-multiple- space-with-a-single-space – TylerH