【问题标题】:which essential characters are converted to html entities?哪些基本字符被转换为 html 实体?
【发布时间】:2011-12-17 13:02:30
【问题描述】:

我正在尝试编写一个例程来比较 $(element).text() 和 $(element).html() 输出以确定 html 标记的位置。这将在稍后用于将“strong”和“em”等格式化标签应用于内容可编辑项,而无需借助 document.execCommand()。

此时我意识到,要进行比较,需要将 $(element).text() 输出中的 '>'、'

我的问题是:

  1. 是否有一组基本字符(我的猜测是 >、

  2. jQuery 的 .html() 方法是否尊重这组字符,或者 jQuery 是否在做自己的事情来平衡浏览器之间的差异。如果是这样,我在哪里可以找到 jQuery 转换为实体的基本字符的完整列表?

进一步说明:

如果在 contenteditable 上我有一个手动输入此文本的段落:

some text, and some characters >, <, ", &, ', ë

$('p').text() 会给我:

some text, and some characters >, <, ", &, ', ë

$('p').html() 会给我:

some text, and some characters &gt;, &lt;, ", &amp;, ', ë

这也是我在 firebug 和 chrome 开发者工具中看到的结果。

和 & 显然对于整个工作来说是必不可少的,而引号和特殊字符则不是。

我想通过 find/replace all 转换$('p').text() 的结果,以匹配$('p').html() 的输出,减去标签本身。

我需要知道除了明显的和&之外还有哪些字符需要转换为html实体才能完美匹配。

这是干什么用的:

我正在尝试使用可内容编辑的 div 构建一个简单的 WYSIWYM 编辑器,而不使用现有的 WYMEditor 和它附带的 iFrame。

这将在受控环境(我的自定义 cms)中使用,并将允许 html 编辑器中预期的功能子集。基本上整个事情就是一堆 P、H1-H6 和 UL>LI、OL>LI 标签,它们位于一个内容可编辑的 div 中。

内容标签(没有 UL 或 OL 子级的 P、H1-H6 和 LI 标签)将只允许包含 STRONG、EM、A、SUB、SUP 和 SPAN 标签。

我的目标不是 IE,但希望在没有平台差异的情况下在 FF 和 Chrome 中工作。这些平台差异之一是在粗体或斜体文本时执行 document.execCommand() 的方式。 FF 包装选择,而 chrome 使用标签。我决定使用以下方式来应用格式:

  1. 获取选择范围。
  2. 列出范围内的所有“内容标签”。
  3. 使用范围对象,以及它与每个“内容标签”的关系,我定义了三个文本块:选择前、选择和选择后。这些以纯文本形式出现,特殊字符未转换为实体。
  4. 对于每个“内容标签”innerhtml,我逐个字符地解析以分解成每种标签的“地图”。我已经建立了标签的层次结构:a > span > sub|sup > strong > em。 “地图”将是这样的:

innerhtml:this &lt;em&gt;is &lt;strong&gt;a&lt;/strong&gt;&lt;/em&gt; &lt;a href="#"&gt;&lt;strong&gt;test&lt;/strong&gt;文本

text: this is a test text
     a: __________XXXXXXXXX
strong: ________X_XXXX_____
    em: _____XXXX__________
  1. 使用之前的选择、选择和选择后的文本,以及格式化操作,然后我创建了一个蒙版。例如,如果“this is”需要加粗:掩码为:
  text: this is a test text
strong: XXXXXXX____________
  1. 将蒙版与贴图结合后,得到的贴图为:
  text: this is a test text
     a: __________XXXXXXXXX
strong: XXXXXXX_X_XXXX_____
    em: _____XXXX__________
  1. 此地图被转换为 html:
<strong>this <em>is</em></strong><em> </em><strong><em>a</em></strong> <a href="#"><strong>test</strong>
  1. 用生成的 html 替换“容器标签”的 innerhtml。

现在我问这个问题的原因是我需要从 html 中提取的文本块和范围给我的文本以完美匹配。所以我不能转换任何特殊字符,只能转换“基本”字符。

我知道这可能不是解决这个问题的最简单或最快的方法,但我是一个视觉思考者,并且以某种方式将问题放在二维网格中非常有帮助。

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    我不太清楚您在这里尝试和询问的内容。

    现在我只能说:是的,&lt;&gt;&amp;(如果在与它们一起引用的属性中使用,也可以使用 '"应该如果写入.html()/.innerHTML,则转义。他们并不需要在所有情况下都被转义,但总是这样做永远不会错。

    如果您需要更广泛的答案,则需要更具体(例如代码示例)。

    编辑:

    我仍然不确定我是否理解您想要实现的目标。您是否试图摆脱 p 元素中的任何 HTML 元素(标签)?然后你就可以设置读取文本并将其设置回来:

    $("p").text($("p").text());
    

    或者,如果您只需要转换任何有问题的字符,您可以使用“匿名”元素,将其设置为 text 为您希望转换的文本并阅读它是 .html()

    alert($("<div>").text("some text, and some characters >, <, \", &, ', ë").html());
    

    【讨论】:

    • 感谢您的回答,我已更新问题并进一步澄清。我没有任何相关的代码。
    • 到目前为止,似乎只有 和 & 字符是必不可少的。接受
    • 这基本上就是我最终要做的。如果您想了解整个故事(可能听起来很愚蠢),请继续阅读:(由于此评论框有限,请添加到问题中)
    猜你喜欢
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多