pvg*_*ijn 4 html javascript dom
我们有一些自定义的JS脚本来处理工具提示,它们在我们渲染页面时放在dom属性(工具提示)中.
但是当我尝试检索此工具提示(显示为div)时,字符串javaScript似乎会自动取消属性值.这是正常的行为吗?有没有办法避免这种情况?
我遇到的问题是<email@example.org>变成(无效)html.
复制的例子:
<div tltip ="<text>" id="escaped" />
<div tltip ="<text>"id="notescaped" />
Run Code Online (Sandbox Code Playgroud)
JS:
a = document.getElementById("escaped").getAttribute("tooltip");
b = document.getElementById("notescaped").getAttribute("tooltip");
a.match("<"); //returns true (unexpected)
a.match("<"); //returns true (expected)
a == b; // returns true (unexpected)
Run Code Online (Sandbox Code Playgroud)
编辑:
澄清我试图显示一个(div)工具提示,我想以某种方式阅读内容,如:
"<b> <email@example.com> <\b>" 从dom并显示在div应该看起来像:" <email@example.org> "
它不是"unescapes"字符的JavaScript,而是解析实体的HTML解析器.这是预期的行为.
如果这听起来不合逻辑,请告诉我如何在属性中添加双引号和单引号.
<div tltip=""'"> does not work.
<div tltip=""'"> does work.
<div tltip='"''> does work.
<div tltip=""'"> does work.
Run Code Online (Sandbox Code Playgroud)
关于编辑的问题
您不必阅读原始源代码.例如:
<div tltip="<b>test</b>" id="test"></div>
var output1 = document.getElementById('html');
var output2 = document.getElementById('plain');
var attrValue = document.getElementById('test').getAttribute('tltip');
output1.innerHTML = attrValue;
output2.textContent = attrValue;
Run Code Online (Sandbox Code Playgroud)
将呈现为:
输出1:测试
输出2:<b>测试</ b>
textContent旧的IE版本不支持.跨浏览器兼容的方式是:
output2[document.textContent === null ? 'textContent' : 'innerText'] = attrValue;
// OR
output2.innerHTML = ''; // Empty contents
output2.appendChild(document.createTextNode(attrValue));
Run Code Online (Sandbox Code Playgroud)
如果您仍想解码实体,那么以下内容将起作用:
// <b> -> <b>
function decode(strHTML) {
var tmp = document.createElement('div');
tmp.appendChild(document.createTextNode(strHTML));
return tmp.innerHTML;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3280 次 |
| 最近记录: |