【问题标题】:JavaScript serializeToString() Adding Attribute AutomaticallyJavaScript serializeToString() 自动添加属性
【发布时间】:2018-09-04 00:54:56
【问题描述】:

我有以下 HTML 代码,我将其转换为文档对象,然后使用 serializeToString() 再次转换为字符串:

    let html = `<!DOCTYPE html>
    <html>
    	<head>
    		<title>Title</title>
    	</head>
    	<body>Hello
    	</body>
    </html>`;
    
    let newHTMLDocument = new DOMParser().parseFromString( html, 'text/html' );
    
    let head = new XMLSerializer().serializeToString(newHTMLDocument.head);
    
    console.log(head);

为什么 head 包含:

<head xmlns="http://www.w3.org/1999/xhtml">
        <title>Title</title>
    </head>

如您所见, xmlns="http://www.w3.org/1999/xhtml" 不在原始字符串中,那么为什么 serializeToString() 将其添加到我的 head 标签中,我该如何停止这样做的函数,所以 head 变量包含这个:

<head>
        <title>Title</title>
    </head>

【问题讨论】:

  • 我假设的 DOM 解析器。它只是在解析时更正 HTML。如果您将 HTML 类型更改为 HTML5 &lt;!DOCTYPE HTML&gt;,我几乎可以向您保证,它不会那样做。
  • @TyQ。它仍然这样做!我试过了。

标签: javascript object dom


【解决方案1】:

来自XHTML spec,第 3.1.1 节:

文档的根元素必须包含一个 xmlns 声明 XHTML 命名空间 [XMLNS]。 XHTML 的命名空间定义为 http://www.w3.org/1999/xhtml。一个示例根元素可能如下所示: &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;

所以,它只是符合标准。

要在没有序列化程序的情况下转换为文本,可能类似于:

let html = `<!DOCTYPE html>
<html>
	<head>
		<title>Title</title>
	</head>
	<body>Hello
	</body>
</html>`;

let newHTMLDocument = new DOMParser().parseFromString( html, 'text/html' );

console.log(newHTMLDocument.head.outerHTML);

【讨论】:

  • 好消息。有没有办法关掉它?我不需要它,因为我将在 html 标记中手动插入该属性。
  • @GTSJoe 查看编辑。大多数情况下你可以使用outerHTML
  • 这比我想要的要好,因为我不需要使用函数来解析代码。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 2014-05-29
  • 2014-02-17
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多