jQuery使用innerHTML
当你通过序列化DOM节点$('div').html()
。只要您的DOCTYPE
是html
的任何味道,这工作正常。但是,使用DOCTYPE
的xhtml
,在插入文档之前,您的序列化DOM节点必须清除some additional cases。根据W3.org,包含节点的Attr
节点,Text
节点,CDATASection
节点,Comment
节点或ProcessingInstruction
节点,其数据包含未与XML匹配的字符的串行化DOM节点(包括U + 003A COLON“:”)必须提高一个INVALID_STATE_ERR
异常。
的W3还指定用户代理必须以XML(XHTML)上下文设置上HTMLElements
和HTMLDocuments
的innerHTML
DOM属性时运行该算法。步骤2在该算法是:
如果innerHTML
属性被一个元素上设置,用户代理必须喂解析器刚刚创建对应于该元素的开始标签中的字符串,宣布所有的命名空间前缀的是在DOM中的该元素的范围内,以及声明DOM中该元素的范围内的默认命名空间(如果有的话)。
用户代理不知道您已经在父元素上指定了epub
名称空间,因为当前上下文位于根上下文之外。因此,当您附加到DOM时,您需要为序列化的DOM节点指定命名空间。
$('div').html('<span xmlns:epub="http://www.idpf.org/2007/ops"
epub:type="pagebreak" id="pagePrefix" title="1"></span>');
jsFiddle here。
更改epub:输入epub类型..或者要严格使用数据-epub-type – 2013-04-05 13:06:36