【问题标题】:Getting inner html without escaping or decoding anything with jQuery使用 jQuery 获取内部 html 而无需转义或解码任何内容
【发布时间】:2013-04-21 14:25:56
【问题描述】:

我正在开发某种在线 html 编辑器,但在使用 jQuery 获取文本区域的内容时遇到问题。

Textarea 元素是这样的:

<textarea id="myText"><b>&lt;p&gt;TEST&lt;/p&gt;</b></textarea>

所以它是转义和非转义文本的混合体。但是,浏览器显示这样的文本区域,这也是我不想要的:

<b><p>TEST</p></b>

我想按原样获取 textarea 的内部 html。如果我尝试.html(),它会转义所有标签,如果我尝试.val(),它会解码转义标签。你可以在http://jsfiddle.net/hnBte/看到这个行为

如何使用 Javascript 获取纯内容,以及如何让 textarea 按原样显示内容?

谢谢

【问题讨论】:

    标签: jquery html


    【解决方案1】:

    我发现这是一个非常有趣的问题,所以我做了一些研究:我尝试了所有的 javascript 和 jQuery 函数来看看我会得到什么,但没有任何效果。您只能获得完全未解析或完全解析的 html。

    我还偶然发现了这个 SO-question,这也证实了,遗憾的是,它无法完成:Getting raw text content of HTML element with HTML uninterpreted

    【讨论】:

    • $("#myText").val($("#myText").html());这不是你要找的吗? jsfiddle.net/WC7gX/1
    • @roasted 不,不是。我给出了混合(转义和未转义)的 html 文本,我想看到/得到它的原样
    • 有人在这里解决了这个问题:stackoverflow.com/a/7394787/2057171
    • @AlbertRenshaw 不幸的是,不...在这里查看我更新的(但未成功的)JSFiddle:jsfiddle.net/y2p0fhtd/5
    【解决方案2】:

    对于 2021 年提出此问题的任何人。我的解决方案是使用 .innerHTML 将文本放置在不同的文本区域中,然后使用 document.getElementById("area").textContent 获取纯文本,无需编码或转义。

    【讨论】:

      【解决方案3】:

      在 jQuery 中尝试.text() 方法。 http://api.jquery.com/text/

      【讨论】:

      • .text() 返回与.val() 相同的结果
      【解决方案4】:

      你不能使用标准的 JavaScript .innerHTML吗?

      这里有一篇关于 JavaScript .innerHTML 和 JQuery .HTML() https://stackoverflow.com/a/3563136/2099977 区别的相关帖子

      【讨论】:

      • 那和jQuery的.html()效果一样
      • innerHTML 返回与.html() 相同的值,而textContent 返回解码后的形式,如.val()
      • 我不确定你是否可以这样做,因为浏览器已经解释了标记和原始 <p>TEST</p>值已转换为 html。我认为您只能使用.val() 将全部内容作为HTML 或使用.innerHTML 以HTML 编码的方式获取全部内容。
      【解决方案5】:

      在用户输入或从外部源加载时捕获输入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-11
        • 2015-09-17
        • 2012-02-07
        • 2020-12-01
        • 2016-12-18
        相关资源
        最近更新 更多