【问题标题】:Passing an HTML string to jQuery function将 HTML 字符串传递给 jQuery 函数
【发布时间】:2009-11-04 19:58:20
【问题描述】:

我正在开发一个从数据库记录中检索一些 HTML 代码的应用程序。然后获取该字符串并将其插入到特定的 div 中。现在,我通过从 Java 传递变量并将其打印在 JSP 的 div 中来完成此操作。现在我正在尝试使用外部 jQuery 函数来完成此任务,我正在努力解决如何将此字符串传递给 jQuery 函数。

我尝试过这样的事情:

<script>
var message = <%=message %>;
</script>
<script src="files/js.js" type="text/javascript"></script>

但是一旦 var 遇到外部函数,它似乎就无法解释它(我尝试使用 StringEscapeUtils 但这并没有解决问题)。

【问题讨论】:

  • message 有什么输出?从技术上讲,这应该可行。
  • 我建议在 scriptlet 之上使用 taglibs/EL。例如。 var message = '${message}';在现实世界中不鼓励使用小脚本。

标签: java javascript jquery


【解决方案1】:

尝试:

var message = '<%= message %>';

【讨论】:

  • 这行得通,我只需要事先使用 StringEscapeUtils.escapeJavaScript
  • 如果纯粹是为了转义撇号,你也可以使用 ${fn:replace(message, "'", "\\'")} 。如果您还想转义 HTML 实体,一个 就足够了。不过好吧,随便选你喜欢的吧:)
【解决方案2】:
var message = '<%=message %>';
$(message); // we have a jQuery object with a property 
            // for each html element in the message string!

【讨论】:

    【解决方案3】:

    当您遇到此类问题时,请查看页面的源代码。 message 是如何渲染的?我的猜测可能是

    var message = Passing an HTML string to jQuery function;
    

    这是无效的。将代码括在撇号中将解决这种情况。

    var message = '<%= message %>';
    

    我通常也将这样的全局对象放在窗口对象上,这样更容易找到

    window.message = '<%= message %>';
    

    【讨论】:

    • 你也可以使用 $.message 代替后者。
    • 我从没想过将对象放在 jQuery 对象上。有趣的是,您只需要确保在您自己的 javascript 之前加载 jQuery。
    【解决方案4】:
    var message= <%= message %>;
    

    您不仅需要在消息文本周围加上一些引号,还需要对 JavaScript 字符串文字进行适当的转义。否则消息中的引用会破坏它,并可能使您面临跨站点脚本攻击。

    var message= '<%= message.replaceAll("\\\\", "\\\\\\\\").replaceAll("'", "\\\\'") %>';
    

    认为这是正确的反斜杠数量,但是 Java 字符串文字反斜杠和正则表达式反斜杠的交互使它们失去理智。如果需要包含换行符等控制代码,也需要转义。

    总而言之,最好将任务交给 JSON 编码库,该库将正确输出各种 JavaScript 类型,而不仅仅是字符串。例如。使用 json-simple:

    var message= <%= JSONValue.toJSONString(message) %>;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2016-01-28
      • 2013-12-11
      相关资源
      最近更新 更多