2015-06-09 7 views
0

У меня есть простая страница с таблицами данных. Если пользователь вводит такие символы, как: < > " ' &, они выходят как &lt; &gt; &quot; &#39; &amp;.JQuery - Оказание специальных символов или замена текста

Я хочу реализовать решение jQuery для замены текста &lt; &gt; &quot; &#39; &amp; на их соответствующие символы. У меня есть таблица контейнеров с именем #reload_me и внутри, что у меня есть все мои данные в других подкатегориях.

В качестве примера я попытался использовать следующий код, но он не работает. Я получаю ошибку TypeError: $(...).replaceText is not a function. Что я делаю не так?

$("#reload_me").replaceText("&amp;", "&"); 
+1

Вы могли бы создать скрипку? – andi

+0

Это самое близкое, что я мог бы восстановить, чтобы воссоздать мой стол. https://jsfiddle.net/jxyzwx3e/ Мне пришлось удалить & перед текстами < > " ' & 'просто для того, чтобы дать более реалистичный пример. Fiddle the course id загружает его правильно lol –

+0

Еще один комментарий, просто имейте в виду, что это рендеринг таблиц из SharePoint 2007, поэтому, возможно, есть проблема с выпуском с самим SharePoint, но я отказался от попыток исправить SharePoint и просто попытался получить быстро и грязно исправить это. –

ответ

1

Я не уверен, где .replaceText пришел, но те ценности, что вы видите, являются значением ASCII для символов. Если ваши символы в настоящее время отображаются с видимыми представлениями ASCII, это означает, что текст, отображающий значения ASCII, является TEXT, а не HTML, поскольку HTML будет отображать желаемое представление символа. Таким образом, заменяя содержимое целевого элемента, используя .html метод JQuery должен вызывать символы для правильного отображения:

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

Вот полный рабочий пример:

var sample = "data data data &lt; &gt; &quot; &#39; &amp;"; 
 

 
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>

+0

Я дал это попробовать, но не имел никакого значения. –

+0

У меня была опечатка - это должно было быть '$ reloadMe.text()' внутри скобки –

+0

Привет, Захари, если я попробую запустить следующий код '$ (" td "). Each (function() {var $ this = $ (this); $ this.html ($ this.text());}); 'он удаляет все мои таблицы и оставляет меня с блоком текста, однако он правильно преобразует символы. Я пробовал делать '$ (" # reload_me td ")', но результаты те же. –

0

Может быть, ваша проблема как представляется, со следующей цитатой

Примечание: Если < DIV>, < SPAN> или < noembed> узел имеет дочерний текстовый узел, который включает в себя символы (&), (<), или (>), innerHTML возвращает эти символы как & усилителя, & lt и & соответственно. Используйте элемент element.textContent, чтобы получить правильную копию содержимого этих текстовых узлов.

Source

+0

Это ожидаемое поведение, потому что '.innerHTML' возвращает разметку, которая может быть повторно применена к элементу или повторно вставлена ​​в DOM. Причина, по которой эти символы имеют специальные представления, которые должны использоваться в разметке, состоит в том, что, если их фактические представления использовались, это может вызвать проблемы при разборе. Это, по сути, экранирующие персонажи. –

+0

Кроме того, ОП никогда не упоминает использование '.innerHTML' –

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> 
Смежные вопросы