无限期地在单引号和双引号之间交替

时间:2016-01-26 11:40:47

标签: javascript jquery

我处理多个嵌入/交替引号的问题,我希望有人可以提供帮助。这是相关代码......

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(/&/, "&amp;").replace(/"/g, "&quot;");

textA = textA.replace("'","\'");

关于我在哪里出错的任何想法?

1 个答案:

答案 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类来设置元素的样式而不是内联样式会好得多。)