jQuery はinnerHTML
、シリアル化された DOM ノードを に渡すときに使用します$('div').html()
。これは、あなたDOCTYPE
がhtml
. ただし、DOCTYPE
シリアル化されたxhtml
DOM ノードでは、ドキュメントに挿入される前にいくつかの追加ケースをクリアする必要があります。W3.orgによると、XML Char 生成 (U+003A COLON ":" を含む) と一致しない文字をデータに含むノードAttr
、Text
ノード、CDATASection
ノード、Comment
ノード、またはノードを含むシリアル化された DOM ノードは、例外を発生させる必要があります。ProcessingInstruction
INVALID_STATE_ERR
W3は、XML(XHTML) コンテキストでinnerHTML
DOM 属性をHTMLElements
設定するときにユーザー エージェントが実行する必要があるアルゴリズムも指定します。HTMLDocuments
そのアルゴリズムのステップ 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。