我正在通过C#生成HTML

myStr = "<span class='red'>September 1980</span><br /><div>abcdef\nhijklm</div>";
shtml = "<span class='red' title='<pre>" + HttpUtility.JavaScriptStringEncode(myStr, false) + "</pre>' id='" + jc.FirstOrDefault().UserId + "'>" + content + "</span>" + after;
... snip snip ...
<%= shtml %>


我的用于初始化qtip的jquery脚本是:

$('[title!=""]').each(function(){
                    $(this).qtip({
                        hide: {
                            fixed: true, delay: 300
                        }, show: 'mouseover',
                        position: {
                            my: 'top center',
                            at: 'bottom center',
                            viewport: $(window),
                            adjust: {
                                method: 'shift shift'
                                , screen: true
                            }
                        }, style: {
                            classes: 'qtip-light', // Inherit from preset style
                            tip: 'topCenter'
                        }
                    });

                });


现在工具提示显示:
\ u003cspan类别= \ u0027abcd \ u0027标题= \ u0027 2013年9月5日12:06 \ u0027 \ u003e \ u003ci

如何在工具提示中呈现html?
这一直在消耗我的时间和大脑...请帮助!

注意:在将此问题标记为重复之前,请阅读以下内容:
我搜索了所有相关帖子,但没有哪一个对我有用。我的用例有所不同,因为我使用qtip来显示javascriptstringencode生成的字符串。

最佳答案

我找不到任何内置函数来解码使用HttpUtility.JavaScriptStringEncode编码的数据。因此,我在各个站点进行了一些研究之后创建了一个JS函数。



String.prototype.replaceAll = function(str1, str2, ignore) {
  return this.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g, "\\$&"), (ignore ? "gi" : "g")), (typeof(str2) == "string") ? str2.replace(/\$/g, "$$$$") : str2);
}

function decodeJs(encodedString) {
  var decodedString = encodedString;
  decodedString = decodedString.replaceAll("\\u0026", "&");
  decodedString = decodedString.replaceAll("\\u0027", "\'");
  decodedString = decodedString.replaceAll("\\u003c", "<");
  decodedString = decodedString.replaceAll("\\u003e", ">");
  return decodedString;
}

function replaceText() {
  $("*").each(function() {
    if (!$(this).children().length) {
      $(this).text(decodeJs($(this).text())).val(decodeJs($(this).val()));
    }
  });
}
$(document).ready(replaceText);
$("html").ajaxStop(replaceText);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

10-06 03:20