使用jQuery将Textarea文本设置为格式正确的HTML代码

时间:2011-05-31 16:02:50

标签: javascript jquery html textarea code-formatting

我正在尝试通过Javascript(jQuery)为我的Textarea生成文本,因为我在JS中有一个变量我需要包含在那里。这就是我现在所做的:

$("#txt_banner1").text(
            '<a href="'+producturl+'"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="125" height="125"><param name="movie" value="../../images/banerxsky2.swf" /><param name="quality" value="high" /><embed src="http://www.xSkySoftware.com/images/banerxsky2.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="125" height="125"></embed></object>')

现在你可能会想:“伙计,格式化你的代码”。好吧,那就是问题 - 我希望我的textarea能够正确格式化我的HTML代码,但是当我在参数中格式化我的代码时,它将不起作用(脚本停止)。

有什么建议吗?

编辑:格式化代码,无效:

        $("#txt_banner1").text(
        '<a href="'+producturl+'">
        <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="125" height="125">
        <param name="movie" value="../../images/banerxsky2.swf" />
        <param name="quality" value="high" />
        <embed src="http://www.xSkySoftware.com/images/banerxsky2.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="125" height="125">
        </embed>
        </object>');

EDIT2:这是我的Textarea代码:

<textarea id="txt_banner1"><a href="AFF_URL">
  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="125" height="125">
  <param name="movie" value="http://xSkySoftware.com//images/banerxsky2.swf" />
  <param name="quality" value="high" />
  <embed src="http://www.xSkySoftware.com/images/banerxsky2.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="125" height="125"></embed>
  </object>
</textarea>

4 个答案:

答案 0 :(得分:2)

狡猾的回答是“你做错了”。别担心,这很容易解决。

JavaScript不允许使用多行字符串。你可以写:

"foo bar\nbaz"

但不是

"foo bar
baz"

除非你逃脱换行符(这不是ECMA规范的一部分,但我测试的所有浏览器都支持这个)

"foo bar\
baz"

执行多行字符串的“正确”方法是在字符串中添加换行符,但您可以使用更多引号来模拟换行符:

"foo bar\n"+
"baz"

是的,它很糟糕,但你有它。

答案 1 :(得分:1)

您可以事先设置txt_banner1的值,然后只需替换脚本中的producturl:

<div id="txt_banner1"><a href='MY_NEW_URL'><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="125" height="125"><param name="movie" value="../../images/banerxsky2.swf" /><param name="quality" value="high" /><embed src="http://www.xSkySoftware.com/images/banerxsky2.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="125" height="125"></embed></object>

脚本:

var text = $("#txt_banner1").text();
$("#txt_banner1").text(text.replace("MY_NEW_URL", producturl);

答案 2 :(得分:1)

您可以将剪辑的HTML放在页面上的隐藏容器中,并按照您喜欢的方式对其进行格式化:

风格:

#html_codez { display: none }

标记:

<div id="html_codez">
    <a href="{producturl}">
        <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
            codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"
            width="125" height="125"><param name="movie" value="../../images/banerxsky2.swf" />
            <param name="quality" value="high" />
            <embed src="http://www.xSkySoftware.com/images/banerxsky2.swf"
                quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer"
                type="application/x-shockwave-flash" width="125" height="125">
            </embed>
        </object>
    </a>
</div>

(请注意您错过的结束</a>。)

然后,通过innerHTML抓取它,在大多数浏览器中,它被标准化为压缩HTML。如果它不在特定浏览器上,您仍然可以使用一些正则表达式替换来清除标记之间的空白区域。在Chrome上,您仍然需要修剪前导和尾随空格:

var code = $.trim($("#html_codez").html());

然后你可以将它放在textarea中:

$("#txt_banner1").val(code.replace("{producturl}", producturl));

答案 3 :(得分:0)

我建议您使用隐藏的<div>元素将链接标记放在页面本身中:

<div id="content" style="display: none;"><a href="#">
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
            codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"
            width="125" height="125">
        <param name="movie" value="../../images/banerxsky2.swf" />
        <param name="quality" value="high" />
        <embed src="http://www.xSkySoftware.com/images/banerxsky2.swf"
               quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer"
               type="application/x-shockwave-flash" width="125" height="125" />
    </object>
</a></div>

然后,您可以使用jQuery克隆链接,动态修改其href属性并使用生成的标记填充您的<textarea>元素:

var $content = $("#content").clone();
$content.children("a").attr("href", producturl);
$("#txt_banner1").val($content.html());

编辑:略微调整标记以获得更好的结果。提供小提琴here