哪些基本字符转换为html实体?

时间:2011-12-17 13:02:30

标签: javascript jquery html

我正在尝试编写一个比较$(element).text()和$(element).html()输出的例程来确定html标记的位置。这将在以后用于将格式标记(如“strong”和“em”)应用于contenteditable,而无需使用document.execCommand()。

此时我意识到要进行比较,包括'>','<'和'&'等字符在$(element).text()输出中需要转换为各自的html实体。从firebug我看到这些字符在innerHTML属性中自动转换。我试过其他角色。如引号和变音符号,这些都不会被转换。

我的问题是:

  1. 是否有一组重要的字符(我猜是>,<和&)在浏览器中一致转换?我的目标浏览器是Firefox和Chrome,没有IE,谢天谢地。

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

  3. 进一步澄清:

    如果在满足的情况下我有一个手动输入此文本的段落:

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

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

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

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

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

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

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

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

    我需要知道明显的&lt;,&gt;和&amp;旁边的其他字符。需要转换为html实体才能完美匹配。

    这是为了什么:

    我正在尝试构建一个带有contenteditable div的简单WYSIWYM编辑器,而不需要使用现有的WYMEditor及其附带的iFrame。

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

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

    我不是针对IE浏览器,但我希望在没有平台差异的情况下在FF和Chrome中使用它。这些平台差异之一是document.execCommand()在粗体化或斜体化文本时的执行方式。当chrome使用标签时,FF会包含选择。我已决定使用以下方式应用格式:

    1. 获取选择范围。
    2. 列出范围内的所有“内容标记”。
    3. 使用范围对象及其与每个“内容标记”的关系我定义了三个文本块:在选择,选择和选择之前。它们是直接文本,特殊字符未转换为实体。
    4. 对于每个“内容标签”innerhtml,我逐个字符地解析以分解成每种标签的“地图”。我建立了标签层次结构:a&gt; span&gt; sub | sup&gt;强大&gt; EM。 “地图”将是这样的:
    5. for innerhtml:this <em>is <strong>a</strong></em> <a href="#"><strong>test</strong> text

      text: this is a test text
           a: __________XXXXXXXXX
      strong: ________X_XXXX_____
          em: _____XXXX__________
      
      1. 使用之前的选择,选择和选择后的文本,以及格式化操作,然后我创建一个掩码。例如,如果'this is'需要加粗:掩码将是:
      2.   text: this is a test text
        strong: XXXXXXX____________
        
        1. 将蒙版与地图组合后,生成的地图为:
        2.   text: this is a test text
               a: __________XXXXXXXXX
          strong: XXXXXXX_X_XXXX_____
              em: _____XXXX__________
          
          1. 此地图转换为html:
          2. <strong>this <em>is</em></strong><em> </em><strong><em>a</em></strong> <a href="#"><strong>test</strong>
            
            1. 用生成的html替换“container tag”的innerhtml。
            2. 现在我问这个问题的原因是我需要从html中提取的文本块和由范围给出的文本完全匹配。所以我不能转换任何特殊的角色,只能转换为“必要的角色”。

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

1 个答案:

答案 0 :(得分:1)

我不清楚你在尝试和问这里。

现在我可以说:是的,<>&(如果在引用的属性中使用'"如果写入.html() / .innerHTML进行转义。他们在所有情况下都不会需要进行转义,但总是这样做永远不会错。

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

编辑:

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

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

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

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