将JavaScript变量(包含包含标记的stmt)插入<;脚本>;
我正在动态地构建一个脚本(这就是为什么它最终会变成一个var),但我已经简化了这个示例。我遇到的问题是浏览器将脚本中的span标记解释为实际的span,而不是脚本的一部分。我已经看过了关于转义字符和html编码/解码的各种资源,但是这些不是相关的问题,或者我不明白 如何在动态生成的脚本中写入span,以便浏览器将其解释为脚本的一部分,而不是它应该呈现的span标记 page.html文件 我还读到jQuery的html()正在解码,这就是我尝试append()、text()和appendChild()的原因 后果将JavaScript变量(包含包含标记的stmt)插入<;脚本>;,javascript,html,Javascript,Html,我正在动态地构建一个脚本(这就是为什么它最终会变成一个var),但我已经简化了这个示例。我遇到的问题是浏览器将脚本中的span标记解释为实际的span,而不是脚本的一部分。我已经看过了关于转义字符和html编码/解码的各种资源,但是这些不是相关的问题,或者我不明白 如何在动态生成的脚本中写入span,以便浏览器将其解释为脚本的一部分,而不是它应该呈现的span标记 page.html文件 我还读到jQuery的html()正在解码,这就是我尝试append()、text()和appendChil
请看以下内容:谢谢你,菲利克斯,但我没有看到(或理解)你的建议与我在文章的变体部分添加的内容有任何不同,我已经尝试了,但又尝试了。那么,你是否真的尝试了
“\\x3cspan class=\x22所需字段指示符\x22\\x3ererequired\\x3c/span\\x3e”
,这就成功了!你能告诉我为什么我需要对尖括号进行编码和反斜杠转义吗?(实际上,我对双引号进行了转义,因为它们位于双引号内:“\\x3cspan class=\\x22required field indicator\\x22\\x3ererequired\\x3c/span\\x3e”
),因为您是通过JavaScript创建JavaScript源代码的。您确实想要创建字符序列\x3c
。但是,如果您简单地将其放在字符串文字中,它将转换为
<script>
$(document).ready(function () {
var formScript = ' $(document).on("ready", function () {';
formScript += $().BuildScript();
$("script#dynamic-script").append(formScript + '});');
});
</script>
<script id="dynamic-script"></script>
(function ($) {
$.fn.BuildScript = function () {
var stmtsToAdd = '';
stmtsToAdd += '$("#X").on("change", function () {' +
' if ($(this).val() == "1" && !$("#label-and-control_Y").is(":visible")) {' +
' $("#label-and-control_Y").show("fast");' +
' $("#control_Y").addClass("required");' +
' $("#control_Y").closest("div.control").prev().empty.append("<span class="required-field-indicator">");' +
' }' +
'});';
return stmtsToAdd;
}
})(jQuery);
"\u003cspan class=\\u0022required-field-indicator\\u0022\u003eRequired\u003c\/span\u003e"
"\x3cspan class=\x22required-field-indicator\x22\x3eRequired\x3c/span\x3e"