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

Alternating between single and double quotes indefinitely

本文关键字:之间 无限 单引号      更新时间:2023-09-26

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

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() 在用户成功在网站上发布内容后调用,并且工作正常,除非"textA"包含撇号(例如"Mike's Opinion"之类的内容)。

问题是(我认为)是,尽管 textA 封装在双引号中 - 这些双引号已经在我的 onclick 属性的单引号内 - 它本身位于 displayMessage 的整个第二个参数的更多双引号内。

我以前认为单引号和双引号之间的交替可以无限期地继续下去,但这个例子似乎表明并非如此。 我也尝试了这些替代方案来打破文本 A 中的任何引号,但都没有奏效......

textA = JSON.stringify(textA).replace(/&/, "&amp;").replace(/"/g, "&quot;");
textA = textA.replace("'","''");

关于我哪里出了问题的任何想法?

你的方法从根本上是错误的。手动创建内联事件处理程序几乎总是错误的方法。

更好的解决方案是例如:

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