动态添加内容时的Javascript引用问题

时间:2011-02-21 16:42:23

标签: javascript jquery html

我正在尝试动态添加存储在变量中的内容。但是,单引号会导致问题。

var dynamicelementcode = $("<div id='container'>" + data +  "</div>");
            dynamicelementcode.prependTo($('#wholecontainer')).hide().fadeIn(300).slideDown(1000);

如果数据变量包含单引号,则会破坏我的代码。我怎么解决这个问题?数据变量从服务器端PHP脚本获取其内容。

任何php / js / jquery解决方案赞赏

修改

PHP Code Serverside

$comment_body = "The boy's bicycle";

echo '{ "author": "'.$author.'", "message": "'.$comment_body.'","parentid": "'.$parent_id.'","currentid": "'.mysql_insert_id().'","timestored": "'.$timestampa.'" }';

Jquery Code,Clientside

var newrootcomment = $("<div class='comment'><div class='comment-holder'><div class='comment-body'>"+ data.message + "</div> <abbr class='timestamp' title=''>" + data.timestored + "</abbr><div class='aut'>" + data.author + "</div> <a href='#comment_form' class='reply' id='id"+ data.currentid + "'>Reply</a> </div> </div>");
            newrootcomment.prependTo($('#wholecontainer')).hide().fadeIn(300).slideDown(1000);

2 个答案:

答案 0 :(得分:1)

var dynamicelementcode = $('<div id="container">').text(data)

jQuery text function会为您自动转义引号。


UPD。只撤消单引号:

var dynamicelementcode = $('<div id="container">').html(data.replace(/'/g,'&#039;'))

UPD 2。如果您查看页面来源,您会看到类似"message": 'The boy's bicycle'的内容 - 这是语法错误。

这是将PHP数据传递给JavaScript的更好方法,也可以使用引号:

$comment_body = "The boy's bicycle";
echo json_encode(array(
  'author' => $author,
  'message' => $comment_body,
  'parentid' => $parent_id,
  'currentid' => mysql_insert_id(),
  'timestamp' => $timestamp
));

答案 1 :(得分:1)

jQuery已经有了插入文本的方法,你不需要连接字符串或者自己去逃避。使用.text()方法:

var dynamicelementcode = $('<div id="container"></div>').text(data);

参考和示例:http://api.jquery.com/text/#text2