我有html
<table>
<tr><td id="cell"><a href="">Google.com</a></td></tr>
</table>
<div id="to"></div>
我有javascript
$(document).ready(function() {
var html = '<input type="text" value="'+$("#cell").html()+'" />'
$("#to").append(html);
});
我不知道为什么,但在执行此代码时,我只在输入中获得<a href=
。在firebug的检查员输入中,html显示为<input type="text" a>="" >google.com<="" value="<a href=" >
如您所见,$quot;
已替换为"
- 这就是问题所在。
我尝试使用.text()
代替.html()
- 几乎相同的情况。
我的错误是什么?
谢谢。
答案 0 :(得分:2)
您需要对值进行编码(在这种情况下通过.val()
设置),而不是直接在字符串中使用它,如下所示:
$(document).ready(function() {
var html = $('<input type="text" />').val($("#cell").html());
$("#to").append(html);
});
You can see it in a demo here。问题是"e;
被解码为"
,这使得您的HTML看起来像这样:
<input type="text" value="<a href="">Google.com</a>" />
你可以看到这让浏览器变得有点疯狂:)
答案 1 :(得分:0)
试试这个:
$(document).ready(function() {
$('<input type="text">').val($("#cell").html()).appendTo("#to");
});
避免从字符串和变量构建HTML,使用jQuery和DOM赋予的函数为属性赋值或更改元素的文本。这样更安全,恕我直言,它也更具可读性。
答案 2 :(得分:0)
尝试编写自定义函数以转义字符串
function unescape(html) {
return html.
replace(/&/gmi, '&').
replace(/"/gmi, '"').
replace(/>/gmi, '>').
replace(/</gmi, '<')
}