我处理多个嵌入/交替引号的问题,我希望有人可以提供帮助。这是相关代码......
displayMessage(
"post success!",
"<p style='margin-top: 15px; margin-bottom: 15px'>if you'd like to share your post...</p>
<a onclick='openSharePopup("+textA+","+numberA+","+numberB+")' style='cursor: pointer; font-size:16px'>
share
</a>"
);
function displayMessage(heading, text){
$("#displayMessageHeadingDiv").html(heading);
$("#displayMessageBodyDiv").html(text);
$("#displayMessageParentDiv").css("display","block");
}
用户在网站上成功发布内容后,会调用displayMessage(),除非&#34; textA&#34;包含撇号(例如&#34;迈克的意见&#34;)
问题是(我认为)虽然textA被封装在双引号内 - 这些双引号已经在我的onclick属性的单引号内 - 它本身在displayMessage的整个第二个参数的更多双引号内。
我之前认为单引号和双引号之间的交替可以无限期地继续,但这个例子似乎暗示了其他情况。我也尝试过使用这些替代品来破坏textA中的任何引号,但都没有工作......
textA = JSON.stringify(textA).replace(/&/, "&").replace(/"/g, """);
textA = textA.replace("'","\'");
关于我在哪里出错的任何想法?
答案 0 :(得分:3)
你的方法根本就是错误的。手动创建内联事件处理程序几乎总是错误的方法。
更好的解决方案是:例如:
var shareLink = $( '<a>share</a>' )
.css({ cursor: 'pointer', 'font-size': '16px' })
.click( function() {
openSharePopup( textA , numberA, numberB );
});
var msg = $( "<p>if you'd like to share your post...</p>" )
.css({ 'margin-top': '15px', 'margin-bottom': '15px' });
displayMessage( "post success!", shareLink.add( msg ) );
function displayMessage(heading, text){
$("#displayMessageHeadingDiv").html(heading);
$("#displayMessageBodyDiv").empty().append(text);
$("#displayMessageParentDiv").show();
}
基本上,您应该创建元素,在代码中添加单击处理程序,并将元素直接添加到容器中。这样您就不必考虑使用何种报价以及在何处使用。
(另一种风格侧面说明,使用CSS类来设置元素的样式而不是内联样式会好得多。)