【问题标题】:.replace() not working in embedded javascript.replace() 在嵌入式 javascript 中不起作用
【发布时间】:2019-03-29 14:49:46
【问题描述】:

当我尝试运行以下代码时,它不会将 &lt、&gt、" 替换为其等效字符

<% if(typeof myTable !== 'undefined'){ %>
        <% myTable = myTable.replace('&lt','<').replace('&gt', '>').replace('&#34', '"') %>
        <script>
            localStorage['text'] += "<%= myTable %>";
        </script>
        <% myTable = undefined; %>
<% } %>

当我检查 myTable 的值时,替换为 ejs 的 plceholder 标记,它仍然具有这些原始形式的字符。

myTable = "&lt;table class=&#34;table table-bordered table-hover&#34;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=&#34;col&#34;&gt;&lt;p contenteditable=&#34;true&#34;&gt;Head&lt;/p&gt;&lt;/th&gt;&lt;th class=&#34;col&#34;&gt;&lt;p contenteditable=&#34;true&#34;&gt;Head&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;p contenteditable=&#34;true&#34;&gt;Null&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p contenteditable=&#34;true&#34;&gt;Null&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p contenteditable=&#34;true&#34;&gt;Null&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p contenteditable=&#34;true&#34;&gt;Null&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;"

我该怎么办?

【问题讨论】:

    标签: javascript html node.js replace ejs


    【解决方案1】:

    我会尝试存储替换字符串的值

    <% myTable = myTable.replace('&lt','<').replace('&gt', '>').replace('&#34', '"') %>
    

    否则就丢了。

    来自docs

    replace() 方法在字符串中搜索指定值或正则表达式,并返回一个新字符串,其中指定的值被替换。

    如果这不起作用,请尝试使用未转义版本的蜜蜂蜇伤:"&lt;%- myTable %&gt;";(而不是 "&lt;%= myTable %&gt;";)。

    【讨论】:

    • 对。我在这里打错了。在我的实际代码中,我已将其分配给 myTable。
    • 尝试未转义版本的蜜蜂蜇伤:"&lt;%- myTable %&gt;";(而不是 "&lt;%= myTable %&gt;";)不过,您对这个字符串的用途还不是很清楚。
    • 实际上,我想附加到一个可编辑的 div,一个具有给定行和列的表,只需单击一个按钮。所以,服务器端给了我一个字符串格式的表,我只想将它附加到我的本地存储中。但它仍然有那些 ascii 字符。
    • 有效。我在内容中得到了我的表格。太感谢了。在您的实际答案中添加该行,以便我可以将其标记为答案...
    【解决方案2】:

    您应该注意到 g 标志并使用 myTable = myTable.replace 而不是 myTable.replace

    因为replace方法不会改变源字符串,见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

    试试下面的代码:

    var myTable = "&lt;table class=&#34;table table-bordered table-hover&#34;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class=&#34;col&#34;&gt;&lt;p contenteditable=&#34;true&#34;&gt;Head&lt;/p&gt;&lt;/th&gt;&lt;th class=&#34;col&#34;&gt;&lt;p contenteditable=&#34;true&#34;&gt;Head&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;p contenteditable=&#34;true&#34;&gt;Null&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p contenteditable=&#34;true&#34;&gt;Null&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p contenteditable=&#34;true&#34;&gt;Null&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p contenteditable=&#34;true&#34;&gt;Null&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;"
    myTable = myTable.replace(/&lt;/g,'<').replace(/&gt;/g, '>').replace(/&#34;/g, '"');
    
    console.log(myTable);

    【讨论】:

    • 对。我在这里打错了。在我的实际代码中,我已将其分配给 myTable。然后我运行了你的代码,它仍然不起作用。它适用于浏览器的javascript控制台,但不适用于ejs。
    • 你为什么不用javascript做你的工作,然后将myTable输出到模板?
    • 感谢您的回复。我还使用 localStorage 每秒保存我的数据,所以当我提交表单时,它会重新加载并且 Javascript 内容会丢失。这就是为什么我在服务器端运行它并将结果作为对象传递。在我完成我的项目后我会考虑这种方式,因为它可能需要一些研究。不管怎样,谢谢你。是的, 使用它解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多