在包含html标记的文本区域中设置文本

时间:2009-09-08 05:23:24

标签: jquery html

我知道这个问题已经asked,但我的情况有点不同。

我有一个textarea,其值如此设置:

<textarea><span>all this inside textarea</span></textarea>

现在我正在使用jQuery做一些ajax,并希望通过jQuery设置textarea的值。

以下是我的jQuery代码。

jQuery(function(){
  jQuery("select#rooms").change(function(){
    var options = '';
    jQuery.getJSON("/admin/selection.php",{id: jQuery(this).val(), ajax: 'true'},
    function(j){
      for (var i = 0; i < j.length; i++) {
        options = j[i].topImage;
jQuery('#toppic').val(options); 
jQuery('#title').val(j[i].title); 
alert(j[i].content); //this is text area content. it has html tags
jQuery('#content').attr(j[i].content); //text area
      }
    })
  })
})
编辑:我的json回复是:

[ {topImage: 'cfil823', title: 'Dining', content: '<SPAN STYLE= "" >Dining Rooms must be simultaneously inviting enough for a festive Sunday brunch and intimate enough for a 
crown jewel in the room. </SPAN>'}]

有没有办法在jquery中转义html标签?

此外,最初textarea设置如下:

<textarea id="content" wrap="hard"><?php echo $comma_separated?></textarea>

3 个答案:

答案 0 :(得分:3)

您应该使用val函数设置textarea内容:

变化:

jQuery('#content').attr(j[i].content);

要:

jQuery('#content').val(j[i].content);

编辑:为了回应您的评论,您应该检查从您的请求返回的JSON对象我强烈建议您使用Firebug来调试您的回调

textarea尚未清除,因为我非常确定j[i].contentundefined,如果你想在这种情况下清除它的价值,你可以:

jQuery('#content').val(j[i].content || '');

因此,如果j[i].contentundefinednull0false,则会删除textarea。

答案 1 :(得分:1)

感谢所有有识之士。但我刚刚发现了我的问题。我的文本区域的id属性是'content'...这是我在json对象中的键的名称。显然javascript不喜欢这样,并且没有像我们谈论的那样表现。

因此,如果有人遇到同样的问题,请确保您的id属性名称与json对象中的键不相同

答案 2 :(得分:0)

<textarea><span>all this inside textarea</span></textarea>

这是无效的。由于没有像tags-inside-a-textarea这样的东西,浏览器会在你之后清理并把它变成你应该写的东西:

<textarea>&lt;span>all this inside textarea&lt;/span></textarea>

但你不应该依赖它。如果您的文本包含字符串</textarea>,您将丢失并可能遭受脚本注入漏洞。

另一方面,设置textarea.value或jQuery $(textarea).val()应该直接包含<这样的字符,因为它们只是纯文本,而不是HTML。

  

现在我在警报框中看不到任何内容

然后CMS是正确的,您的j[i].content不包含您认为它的HTML内容。