Jquery - 渲染特殊字符或替换文本

时间:2015-06-09 20:12:43

标签: javascript jquery regex

我有一个包含数据表的简单页面。如果用户输入如下字符:< > " ' &安培; ,他们出来< > " ' &

我想实现一个jQuery解决方案,将文本< > " ' &替换为正确的字符。我有一个名为#reload_me的容器表,里面有我在其他子表中的所有数据。

我尝试使用以下代码作为示例,但它似乎不起作用。我收到错误TypeError: $(...).replaceText is not a function。我做错了什么?

$("#reload_me").replaceText("&", "&" );

3 个答案:

答案 0 :(得分:1)

我不确定.replaceText来自何处,但您看到的那些值是字符的ASCII值。如果您的字符当前显示的ASCII表示可见,那么这意味着显示ASCII值的文本是TEXT而不是HTML,因为HTML将呈现所需的字符表示。因此,使用jQuery的.html方法替换目标元素的内容应该会使字符正确显示:

var $reloadMe = $("#reload_me");
$reloadMe.html($reloadMe.text());

以下是完整的工作样本:



var sample = "data data data < > " ' &";

var $td = $("td");
$td.text(sample);

$("#btnFixIt").on("click", function() {
    $td.each(function() {
       var $this = $(this);
       $this.html($this.text());
    });
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table border="1">
    <tr>
        <th>1st record table</th>
    </tr>
    <tr>
        <td></td>
    </tr>
    <tr>
        <td></td>
    </tr>
</table>
<br />
<br />
<table border="1">
    <tr>
        <th>2nd record table</th>
    </tr>
    <tr>
        <td></td>
    </tr>
    <tr>
        <td></td>
    </tr>
</table>
<br />
<br />
<table border="1">
    <tr>
        <th>3rd record table</th>
    </tr>
    <tr>
        <td></td>
    </tr>
    <tr>
        <td></td>
    </tr>
</table>
<br />
<button type="button" id="btnFixIt">Fix it</button>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

也许你的问题似乎与下一个引用

有关
  

注意:如果&lt; DIV&GT; ,&lt;跨度&GT;或者&lt; NOEMBED&GT;节点具有包括字符(&amp;),(&lt;)或(&gt;)的子文本节点,innerHTML分别将这些字符返回为&amp; amp,&amp; lt和&amp; gt。使用element.textContent来获取这些文本节点的正确副本。内容。

Source

答案 2 :(得分:0)

我最后按照本指南http://logicflowau.blogspot.ca/2009/08/sharepoint-xslt-data-view-issues_1789.html修正了我的问题。这是一个Sahrepoint修复而不是Jquery修复。

Add this function to your DispForm.aspx file:

    <xsl:template name="formatMultiLineText">
    <xsl:param name="text" select="."/>
    <xsl:choose>
    <xsl:when test="contains($text, '&#xa;')">
    <xsl:value-of select="substring-before($text, '&#xa;')" disable-output-escaping="yes"/>
    <br/>
    <xsl:call-template name="formatMultiLineText">
    <xsl:with-param name="text" select="substring-after($text,'&#xa;')"/>
    </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
    <xsl:value-of select="$text" disable-output-escaping="yes"/>
    </xsl:otherwise>
    </xsl:choose>
    </xsl:template>


Where your multiple line text is displaying, replace this:

    <xsl:value-of select="@Description">


with this:

    <xsl:call-template name="formatMultiLineText">
    <xsl:with-param name="text" select="@Description">
    </xsl:call-template>