我使用了一個內(nèi)容可編輯的元素:
<span id="myinput" contenteditable="true">This is editable.</span>
和
document.getElementById('myinput').innerHTML
從Javascript中讀取其內(nèi)容。
但結(jié)果是:
"布拉& quot= & gtinnerHTML = & quot胡說八道。nbsp & quot
"您好\n您好& quot= & gtinnerHTML = & quot你好& ltbr & gt晚安& quot(Firefox)和innerHTML = & quot你好& ltdiv & gtbonsoir & lt/div & gt;"(鉻合金)
也許有很多其他的東西被翻譯成HTML...
如何將innerHTML轉(zhuǎn)換成普通文本?
(即在我的兩個例子中:& quot布拉& quot和& quot您好\n您好& quot)
嘗試使用;
// for IE
document.getElementById('myinput').innerText
// for everyone else
document.getElementById('myinput').textContent
在查找換行符等方面,考慮:
el = document.getElementById('myinput');
var nodes = el.childNodes;
var text = '';
for(var i = 0; i < nodes.length; i++) {
switch(nodes[i].nodeName) {
case '#text' : text = text + nodes[i].nodeValue; break;
case 'BR' : text = text + '\n'; break;
}
}
console.log(text);
由于這種行為在不同的瀏覽器中是不一致的,您必須自己實現(xiàn)它:
var convert = (function() {
var convertElement = function(element) {
switch(element.tagName) {
case "BR":
return "\n";
case "P": // fall through to DIV
case "DIV":
return (element.previousSibling ? "\n" : "")
+ [].map.call(element.childNodes, convertElement).join("");
default:
return element.textContent;
}
};
return function(element) {
return [].map.call(element.childNodes, convertElement).join("");
};
})();
行動:http://jsfiddle.net/koyd8h59/1/
當(dāng)然,如果您想使用& lth1 & gt和其他塊級標(biāo)簽。
這是我的答案——它并不完美,有時會出現(xiàn)斷行,但我發(fā)現(xiàn)這方面的信息很少,也許它會對某些人有所幫助。
const parseNode = node => {
let content = ""
for (const child of node.childNodes) {
if (child.tagName === "BR") {
content += "\n"
}
if (child.tagName === "DIV" && !child.querySelector("br")) {
content += "\n"
}
if (child instanceof Text) {
content += child.textContent
} else {
content += parseNode(child)
}
}
return content
}