有html代码:<p id="content">—<p>
。
输出应为<p id="content">—<p>
或—
。
我试着在下面找到它,但结果只有—
?
document.writeln("Output:");
document.writeln(document.getElementById("content").innerHTML);
document.writeln(document.getElementById("content").innerText);
document.writeln(document.getElementById("content").outerHTML);
document.writeln(document.getElementById("content").outerHTML);
document.writeln(document.getElementById("content").textContent);
&#13;
<p id="content">—<p>
&#13;
如何通过JavaScript(或框架)实现输出?可能吗?
答案 0 :(得分:2)
据我所知,在呈现元素之前,你不能轻松地获取元素的原始内容。但是,可以获取角色的UTF-16字符代码。
var content = document.getElementById("content").innerText;
var code = "&#" + content.charCodeAt(0) + ";";
var safeCode = code.replace("&", "&");
//This prints the dash
document.writeln(code);
//This prints the raw code (—)
document.writeln("<br>" + safeCode);
//This will output — to the console
console.log(code);
Original content: <span id="content">—<span><br>
这为—
提供了—
UTF-16代码。
答案 1 :(得分:1)
不幸的是,使用纯JavaScript不可能实现这一点,但是对于像Underscore和jQuery这样的库,它是可能的。 jQuery的方式被认为不太安全(我不知道为什么),因此,我将编写使用Underscore来实现它的方法。
您可以使用下划线与_.escape(string);
进行此操作。
但是当你打印它时,浏览器会渲染它。要解决此问题,您可以拆分返回的字符串,然后在它们之间添加<span>
元素。
请参阅the demo。
这仅适用于
&
,<
,>
,"
和`。
答案 2 :(得分:1)
这是不可能的。这是一个例子,输出到控制台而不是页面。您必须查看控制台才能看到输出。 我按照这个说明进行了解释。
<!DOCTYPE html>
<html>
<head>
<title>Test JS entity capture</title>
</head>
<body>
<p>
From <em>"How can get original content(with ascii codes) from element?"</em><br>
<code>http://stackoverflow.com/questions/32803029/</code>
</p>
<p id="targetP">
This is <code>&mdash;</code> : <span id="mdash">—</span>
</p>
</body>
<script>
var elm = document.getElementById('mdash');
console.log('elm.innerHTML = ' + elm.innerHTML);
console.log('elm.innerText = ' + elm.innerText);
</script>
</html>
&#13;
会发生什么?
服务器发送源HTML,并且可能单独发送javascript 浏览器解析HTML并构建DOM树(文档对象模型)。
当它解析HTML时,它会将字符实体引用—
转换为引用所代表的实际字符;现在,DOM包含字符—
,当您使用javascript获得该元素的innerText
或innerHTML
时,您将获得该字符。您无法知道该字符是否已键入(就像我刚才输入的那样:在Mac上使用shift + option + dash)或者它最初是作为字符实体发送的。