将html代码存储在data属性中

时间:2016-10-04 19:50:31

标签: javascript php jquery html

我需要能够将格式化的HTML存储在数据属性中,稍后由jQuery以两种格式提取:

  1. HTML
  2. 纯文字
  3. 使用我的PHP,我可以像这样存储HTML:

    echo '<li data-desc="'. htmlspecialchars($myHTMLdescription) .'" class="myTerm">'. stripslashes($myItem) .'</li>';
    

    后来我用JS来获取值:

    $(document).on('click', '.myTerm', function() {
        var thisTerm    = $(this).text();
        var description = $(this).attr('data-desc');
        var descNoHTML = description.text();
    });
    
    如果文本中有链接等HTML元素,那么

    descNoHTML似乎会破坏代码。

3 个答案:

答案 0 :(得分:0)

使用js

解码编码的字符串
function decodeEntities(encodedString) {
    var textArea = document.createElement('textarea');
    textArea.innerHTML = encodedString;
    return textArea.value;
}
$(document).on('click', '.myTerm', function() {
    var thisTerm    = $(this).text();
    var description = $(this).attr('data-desc');
    description  = decodeEntities(description );
    var descNoHTML = description.text();
});

在直接询问任何问题之前,您应该尝试搜索相同的问题。你的问题可能有答案。我认为this link对您有所帮助。

答案 1 :(得分:0)

尝试:

var descNoHTML = $(description).text();

答案 2 :(得分:0)

htmlspecialchars用于转义HTML主要部分中的字符。例如,<>&是HTML中的特殊字符。它们可以分别以&lt;&gt;&amp;转义。

但属性的双引号是一个完全不同的环境。 <>&不是特殊字符。唯一的特殊字符是"。见https://www.w3.org/TR/html-markup/syntax.html#syntax-attributes。实际上我直到现在还没有意识到你无法逃避双引号,但这就是规范所说的。因此,如果你想要正确地做到这一点,你必须使用你选择的编码自己逃避它们,然后在你阅读属性时将它们取消它们。

我们无法将\"用于",因为根本不允许使用"。我们将"编码为%q。然后%是一个特殊字符,所以我们将其编码为%p。那么你的PHP系列就变成了:

$myEscapedHTMLdescription = str_replace(array('%', '"'), array('%p', '%q'), $myHTMLdescription);
echo '<li data-desc="'. $myEscapedHTMLdescription .'" class="myTerm">'. stripslashes($myItem) .'</li>';

http://php.net/manual/en/function.str-replace.php。然后在javascript中你必须解码它:

var description = $(this).attr('data-desc')
    .replace(/%q/g, '"')
    .replace(/%p/g, '%');

这大部分未经测试(我这里没有安装PHP),因此可能存在拼写错误。