1

我想做这样的事情:

<script>
var text = "this is some sample text that i want to replace";
var new_text = text.replace(/'/g, "\\'");
var new_text = text.replace(/"/g, "\"");
document.write(new_text);
</script>

但只要我的 var 中有一个 " ,text var text = "this is some sample "text" that I want to replace";它就会破坏我的 javascript ,因此我无法替换它。

我的 var 文本来自 modx CMS tiny mce 字段,因此它是一种像这样显示的 $ [[*content]]。

这是我的 modx 模板代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> 
<head><meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>[[*titrepage]]</title>
<style type="text/css">
div.code_view {
    height:auto;
    }

div.code_demo {

    /* margin:1em auto 1.4em; */
    border:1px solid #ddd;
                width: 535px;
                color: #112433;

    }

div#content div.code_demo ul.demoLinks {
    margin:6px 6px 10px;
    }

div#infoDiv { 
   padding:0 8px 8px;
   }



div#infoDiv h4 {
    margin:4px 0;
    font-size:1.1em;
    }

</style>
<script src="http://aurorafilms.eskem-studio.com/assets/templates/aurora/js/dw_contentswap.js" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8">

function init_ContentSwap() {
    var swap1 = {
        restoreDefault: false,
        content: {
            'old': "<h4>Synopsis</h4><p>[[*synopsis]]</p>",
            'infos': '<h4>Infos</h4><p>[[*infos]]</p>',
                                            'presse': "<h4>Presse</h4><p>[[*Presse:jsonEncode]]</p>",
            'festivals': "<h4>Festivals</h4><p>[[*festival]]</p>"


        }
    }

    dw_ContentSwap.setup(swap1);
}

dw_Event.add(window, 'load', init_ContentSwap);

</script></head>
<body>  
<div id="page">    <ul class="demoLinks">
        <li style="z-index: 10; width: 80px; position: relative; "><a href="#old" class="showInfo old">Synopsis</a></li>
        <li style="z-index: 9; width: 80px; position: relative;  left: -20px;"><a href="#infos" class="showInfo infos">Infos</a></li>
        <li style="z-index: 8; width: 80px; position: relative;  left: -40px;"><a href="#presse" class="showInfo presse">Presse</a></li>
        <li style="z-index: 7; width: 80px; position: relative;  left: -60px;"><a href="#festivals" class="showInfo festivals">Festivals</a></li>

    </ul><div id="content" style="float: left;" >
            <div id="text">
<!-- demo -->

<div class="code_demo">


    <div id="infoDiv"><h4>Synopsis</h4><p>[[*synopsis]]</p></div>
</div>


<!-- end demo -->

<p class="clearer">&nbsp;</p></div> </div>  </div>    



</body>
</html>

那么最好的方法是什么?

4

2 回答 2

1

问题是,您试图将资源中的内容用作 javascript 字符串(由 modx 解析器注入)。但是 javascript 中的硬编码字符串必须遵循一些规则(没有或只有转义的换行符,正确的引用)。因此,简单地在它周围加上一些引号只会在最简单的情况下有所帮助。

要解决您的问题,请尝试以下操作:

1. 创建一个新的片段,调用jsonEncode内容如下:

<?php
return json_encode($input);

2. 将要使用资源内容的 javascript 代码更改为:

var text = [[*content:jsonEncode]];

链接:


更新

看到添加的代码,我建议采用不同的方法。如果您使用嵌套的 modx 变量,我上面描述的内容可能会中断。我认为最节省的方法是将js中需要访问的任何内容呈现到隐藏的div中。并innerHTML从该元素中提取。

于 2013-01-18T12:14:29.807 回答
0

尝试:

<script>
var text = "this is some sample text that i want to replace";
var new_text = new_text.replace(/["']/g, "'")
document.write(new_text);
</script>
于 2013-01-18T12:13:45.623 回答