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