为什么我在重构 jQuery 代码时得到的是 [object Object] 而不是预期的 HTML?
Why am I getting [object Object] instead of my expected HTML when refactoring jQuery code?
我正在尝试清理我的代码,我发现我的脚本中有许多类似于以下内容的片段:
$msg.html('<a href="#" data-userName=' + msg.user +
' class="userName" onClick="showCurrUsersMsgs(this);">@' + msg.user + '</a>' + '<span class="timestamp"> <b>·</b> ' +
jQuery.timeago(msg.created_at) +'</span></br>' +
msg.message);
我试过做类似
的事情
var $userProfile = $('<a href="#" data-userName=' + msg.user +
' class="userName" onClick="showCurrUsersMsgs(this);">@' + msg.user + '</a>');
var $timeStamp = $('<span class="timestamp"> <b>·</b> ' +
jQuery.timeago(msg.created_at) +'</span>');
$msg.html($userProfile + $timeStamp + '</br>' + msg.message);
以使其更具可读性,但页面无法正确构建。相反,它显示类似 [Object][Object]
.
的内容
为什么会发生这种情况,我该如何解决这个错误?
您不能 "add" 两个 jQuery 对象在一起。您应该只是将 HTML 片段构建为字符串,然后将字符串连接在一起:
var userProfile = '<a href="#" data-userName=' + msg.user +
' class="userName" onClick="showCurrUsersMsgs(this);">@' + msg.user + '</a>';
var timeStamp = '<span class="timestamp"> <b>·</b> ' +
jQuery.timeago(msg.created_at) +'</span>';
$msg.html(userProfile + timeStamp + '</br>' + msg.message);
就是说,如果您真的有兴趣清理它,您应该停止使用简单的字符串连接来构建您的 HTML。选择一个真正的模板库,如 Handlebars、HTMLBars、Jade 等
这是重构您的 html 生成 jQuery 代码的清晰(尽管很长)方法:
var $a = $('<a>', {
'href': '#',
'data-userName': msg.user,
'class': 'userName',
'html': '@' + msg.user
}).on('click', function() { showCurrUsersMsgs(this);});
var $span = $('<span>', {
'class': 'timestamp',
'html': '<b>·</b>' + msg.created_at
});
var $p = $('<p>', {html: msg.message});
var $html = $a.add($span).add($('<br>')).add($p);
我正在尝试清理我的代码,我发现我的脚本中有许多类似于以下内容的片段:
$msg.html('<a href="#" data-userName=' + msg.user +
' class="userName" onClick="showCurrUsersMsgs(this);">@' + msg.user + '</a>' + '<span class="timestamp"> <b>·</b> ' +
jQuery.timeago(msg.created_at) +'</span></br>' +
msg.message);
我试过做类似
的事情var $userProfile = $('<a href="#" data-userName=' + msg.user +
' class="userName" onClick="showCurrUsersMsgs(this);">@' + msg.user + '</a>');
var $timeStamp = $('<span class="timestamp"> <b>·</b> ' +
jQuery.timeago(msg.created_at) +'</span>');
$msg.html($userProfile + $timeStamp + '</br>' + msg.message);
以使其更具可读性,但页面无法正确构建。相反,它显示类似 [Object][Object]
.
为什么会发生这种情况,我该如何解决这个错误?
您不能 "add" 两个 jQuery 对象在一起。您应该只是将 HTML 片段构建为字符串,然后将字符串连接在一起:
var userProfile = '<a href="#" data-userName=' + msg.user +
' class="userName" onClick="showCurrUsersMsgs(this);">@' + msg.user + '</a>';
var timeStamp = '<span class="timestamp"> <b>·</b> ' +
jQuery.timeago(msg.created_at) +'</span>';
$msg.html(userProfile + timeStamp + '</br>' + msg.message);
就是说,如果您真的有兴趣清理它,您应该停止使用简单的字符串连接来构建您的 HTML。选择一个真正的模板库,如 Handlebars、HTMLBars、Jade 等
这是重构您的 html 生成 jQuery 代码的清晰(尽管很长)方法:
var $a = $('<a>', {
'href': '#',
'data-userName': msg.user,
'class': 'userName',
'html': '@' + msg.user
}).on('click', function() { showCurrUsersMsgs(this);});
var $span = $('<span>', {
'class': 'timestamp',
'html': '<b>·</b>' + msg.created_at
});
var $p = $('<p>', {html: msg.message});
var $html = $a.add($span).add($('<br>')).add($p);