你真的要當心與正則表達式/ .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-空格與單個空格 – TylerH