.text()
/textContent
不包含HTML實體(如
),這些返回爲文字字符。下面是一個使用non-breaking space Unicode轉義序列的正則表達式:
var newStr = $('#myDiv').text().replace(/\u00A0/g, '');
$('#myText').val(newStr);
Demo
也可以使用文字非打破空間字符,而不是在正則表達式轉義序列,但是我發現逃生在這種情況下序列更清晰。不過,評論無法解決。
也可以使用.html()
/innerHTML
來檢索包含HTML實體的HTML,如@ Dystroy的答案。
下面是我的原始答案,我錯誤地解釋了OP的用例。我會離開這裏萬一有人需要從DOM元素的文字內容中刪除
[...]但是,要知道,重新設置.html()
/innerHTML
元素意味着搗毀了所有的聽衆和與之相關的數據。
因此,這裏是一個遞歸的解決方案,它只改變文本節點的文本內容,不用重新解析HTML或者任何副作用。
function removeNbsp($el) {
$el.contents().each(function() {
if (this.nodeType === 3) {
this.nodeValue = this.nodeValue.replace(/\u00A0/g, '');
} else {
removeNbsp($(this));
}
});
}
removeNbsp($('#myDiv'));
Demo
'' 將不被理解爲在你的JS文件中的HTML實體。 – ComFreek
' '是一個HTML實體 - 在'.text()'的返回中它與白色空間相同。 –
@FabrícioMatté我不這麼認爲。 將被轉換爲真正的[非破壞空間](http://en.wikipedia.org/wiki/Non-breaking_space)。 – ComFreek