【问题标题】:Preserving single or double quotes around attributes in browser在浏览器中的属性周围保留单引号或双引号
【发布时间】:2014-12-27 09:49:18
【问题描述】:

我想在 html 属性周围保留单引号或双引号,特别是对于内容可编辑 div 中的 innerHTML。我知道这是一个奇怪的要求,但我正在寻找可能性。因此,假设我将 html 从服务器放入内容可编辑的 div 中:

<div class="editable">
    PRESS MENU BUTTON<img src='BUTTON_BACK.png' vspace='-16' width='32' height="32">
</div>

这应该被保留。但目前在 Firefox 中,当我检查 DOM 时,它只是将所有单引号转换为所有属性周围的双引号。

所以问题是:

  • 是否有任何浏览器配置可以禁用此行为?
  • DTD 在这种情况下有何帮助(仅适用于可编辑部分)?
  • 还有其他见解吗?

编辑: 此外,当我通过 innerHTML 获取 div 的内容时,我得到了其内容的修改版本,单引号替换为双引号。由于per SGML 没有使用双引号引用属性的要求。所以它不仅是开发人员工具。

我已经访问过 SOQ 12,但我的问题略有不同。

【问题讨论】:

  • ...为什么?当您在 Firefox 中检查 DOM 时,您看到的根本不是 HTML 的“转换”版本。您所看到的是以类似 HTML 的结构表示的 DOM。它与您长期丢弃的原始 HTML 无关。它的语法没有被保留;语法仅用于传输信息,之后它变得无关紧要。再说一遍:为什么这是一个问题?
  • @deceze 当我回显 innerHTML 时,我还看到了 html 的转换版本。
  • @deceze 的要求是不要丢弃该信息,在这里保留单张或双张或我放在属性周围的任何东西都是微不足道的。因为 SGML 没有要求在属性检查 ref:w3.org/TR/REC-html40/intro/sgmltut.html#h-3.2.2 周围放置双引号
  • 为什么这是一个“要求”?谁需要这个?干什么用的?
  • @deceze 我将 html 片段主要是图像导入到数据库中,并使用浏览器可编辑区域对其进行编辑。要求(客户)是保留引号,无论它们是什么。例如片段示例:PRESS MENU BUTTON&lt;img src='BUTTON_BACK.png' vspace='-16' width='32' height="32"&gt;

标签: html quotes dtd double-quotes


【解决方案1】:

那些引号实际上根本不在 DOM 中; DOM 是一种数据结构,具有属性值的字符串对象。它不保留有关原始源中的字符串是单引号还是双引号的任何信息,因为这两种形式的含义没有区别。

您在 Firefox 的开发者工具中看到的 HTML 不是您的 HTML 源代码的副本;它是从 DOM 数据结构生成的。并且由于 DOM 不包含有关字符串在原始源代码中如何引用的任何信息,因此开发人员工具只是在从 DOM 生成新 HTML 时以默认方式将它们全部引用。

【讨论】:

  • w3.org/TR/REC-html40/intro/sgmltut.html#h-3.2.2 给这个参考它也不是强制使用双引号引用属性所以问题是为什么浏览器会转换它们?如何避免这种情况?
  • 它不会故意“转换”它们。它只是不记得它们最初是如何被引用的。原始 HTML 文本在解析为 DOM 树后被丢弃。
  • 感谢您的解释,所以没有办法让浏览器记住这些引号,甚至自定义 DTD?
  • 浏览器可以被编程(由浏览器的开发者)来保留这类信息,但如果浏览器不支持它,那么文档就无法制作浏览器做到这一点。解析器将忽略 HTML 文本中的其他可能变化,例如标签内的间距:&lt; foo /&gt; 将生成与 &lt;foo /&gt; 完全相同的 DOM 节点。
【解决方案2】:

HTML 是“结构化信息的载体”,它本身并不是信息。这就像一封信的信封。 HTML 用于将所需 DOM 的结构信息从您的服务器传送到浏览器。一旦浏览器接收到这些信息,它就会“解包”它并构建 DOM。然后它丢弃 HTML 文本,因为它没有进一步的用途;它现在正在使用 DOM 数据结构。

在 DOM 中没有地方存储用于构造 DOM 元素属性的引号类型。因为无关紧要。 foo='bar' 100% 等同于 foo="bar"foo=bar 在以序列化形式表示属性及其值方面。总是可以从 DOM 派生出一个序列化的表单;换句话说,DOM 总是可以从头开始再次写入 HTML。您可以整天来回转换 HTML → DOM → HTML → DOM → HTML。但是,HTML 的特定格式不会保留,因为它无关紧要并在转换中被丢弃。

这就是您在 DOM 检查器或.innerHTML 中看到的内容:只是以序列化 HTML 表示的当前 DOM 的表示。只要它表达相同的信息,关心该 HTML 的特定格式是没有意义的。不,你不能保存它。

如果你真的想要这样,你将不得不向后弯腰并进行大量的手动 HTML 处理。

【讨论】:

  • 有道理,我认为可以自定义 DTD 以覆盖该行为。
  • DTD 还是信息的载体。在这种情况下,它表达了文档的合法结构,即文档中可能包含哪些信息。您所说的是更肤浅的层面,即该文档结构的特定表示的句法 级别。 DTD 不关心由 SGML/XML/HTML 规范规范的语法。
猜你喜欢
  • 2013-06-01
  • 1970-01-01
  • 2011-01-27
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多