从td获取转义的html并将其作为值输入到输入中

时间:2010-10-19 10:43:07

标签: javascript jquery

我有html

<table>
<tr><td id="cell">&lt;a href=&quot;&quot;&gt;Google.com&lt;/a&gt;</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&gt;="" &gt;google.com&lt;="" value="&lt;a href=" >如您所见,$quot;已替换为" - 这就是问题所在。

我尝试使用.text()代替.html() - 几乎相同的情况。

我的错误是什么?

谢谢。

3 个答案:

答案 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。问题是&quote;被解码为",这使得您的HTML看起来像这样:

<input type="text" value="&lt;a href=""&gt;Google.com&lt;/a&gt;" />

你可以看到这让浏览器变得有点疯狂:)

答案 1 :(得分:0)

试试这个:

$(document).ready(function() {
   $('<input type="text">').val($("#cell").html()).appendTo("#to");
});

避免从字符串和变量构建HTML,使用jQuery和DOM赋予的函数为属性赋值或更改元素的文本。这样更安全,恕我直言,它也更具可读性。

答案 2 :(得分:0)

尝试编写自定义函数以转义字符串

function unescape(html) {
  return html.
    replace(/&amp;/gmi, '&').
    replace(/&quot;/gmi, '"').
    replace(/&gt;/gmi, '>').
    replace(/&lt;/gmi, '<')
}