javascript通过+“”+创建字符串

时间:2011-09-05 21:40:31

标签: javascript

$("body").append( "<p id='Zoom'>Send to: <b>" 
                 + full + "</b> <div id='fb-root'></div><script src='http://connect.facebook.net/en_US/all.js#xfbml=1'></script><fb:send href='"
                 + link + " font='' colorscheme='dark'></fb:send><br>  <textarea  cols='40' rows='7'>"
                 + msg  + "</textarea></p>"
                );

此JavaScript代码有什么问题?我不能在""之间有一个脚本块吗?我该如何解决这个问题?

5 个答案:

答案 0 :(得分:4)

通常做这样的事情:

"<scr" + "ipt>...</scr" + "ipt>";

答案 1 :(得分:3)

在脚本块中包含字符序列</script将结束脚本块。 HTML解析器对JavaScript字符串文字语法一无所知,他们只是说<script>开始标记和之后的第一个</script>结束标记之间的所有内容都是脚本元素。

使用'<\/script>''\x3C/script>'或类似内容,避免将</个字符放在一起。你也经常看到unescape('%3C/script>'),但这是一个非常毫无意义的迂回方式。 '</scr'+'ipt'也很常见,但无效;从技术上讲,即使只是两个字符的序列</(ETAGO)也应该结束脚本块,但浏览器通常会给你一些自由度。 '<'+'/script'有效。

然而,正如帕特里克所说,将<script>元素写入innerHTML(正如你在jQuery的append()中所做的那样)不起作用(并没有多大意义) 。通常情况下,最好使用类似DOM的方法向页面添加元素,并getScript动态加载脚本,但是对于这样的第三方脚本,不确定是否可行。例如,如果外部脚本依赖于document.write,则永远不可能动态加载它。其他人可能会因为寻找自己的脚本标签而被绊倒。可能需要进行一些反复试验。

"<textarea  cols='40' rows='7'>"+msg+"</textarea>"

不要做这样的事情。在不转义<&"的情况下将文本转换为HTML字符串是XSS安全漏洞和错误的处方。 jQuery有很好的DOM风格的内容创建工具,使用它们,例如:

$('<textarea/>', {cols: 40, rows: 7, val: msg})

答案 2 :(得分:2)

你有几个问题。

  1. jQuery在追加时会清除<script>个元素。
  2. 您不能将<div>元素(或其他display:block元素)嵌套在<p>元素中。
  3. <div>更改为内联元素,并使用jQuery.getScript()[docs]方法加载脚本。

答案 3 :(得分:1)

如果您要在JS中使用HTML标记,则应将JS括在CDATA块中。

<script type="text/javascript">
   // <![CDATA[

    $("body").append( '<p id="Zoom">Send to: '
                    + '<b>' + full + '</b>'
                    + '<div id="fb-root"></div>'
                    + '<script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>'
                    + '<fb:send href="' + link + ' font="" colorscheme="dark"></fb:send>'
                    + '<br><textarea  cols="40" rows="7">' + msg  + '</textarea>'
                    + '</p>'
            );

   // ]]>
</script>

答案 4 :(得分:0)

完成Larsenal的回答,这可以工作:

$("body").append("<p id='Zoom'>Send to: <b>" + full + "</b> <div id='fb-root'></div><script src='http://connect.facebook.net/en_US/all.js#xfbml=1'></scr" + "ipt><fb:send href='" + link + " font='' colorscheme='dark'></fb:send><br>  <textarea cols='40' rows='7'>" + msg + "</textarea></p>");