2

jqueryを使用して、divのスパンの下に挿入しようとしています。

HTML:
<span epub:type="pagebreak" id="pagePrefix" title="1"></span>

JS:
$('div').html('<span epub:type="pagebreak" id="pagePrefix" title="1"></span>');

次のエラーが表示されます。SyntaxError: DOM Exception 12

これの回避策はありますか?

4

3 に答える 3

5

jQuery はinnerHTML、シリアル化された DOM ノードを に渡すときに使用します$('div').html()。これは、あなたDOCTYPEhtml. ただし、DOCTYPEシリアル化されたxhtmlDOM ノードでは、ドキュメントに挿入される前にいくつかの追加ケースをクリアする必要があります。W3.orgによると、XML Char 生成 (U+003A COLON ":" を含む) と一致しない文字をデータに含むノードAttrTextノード、CDATASectionノード、Commentノード、またはノードを含むシリアル化された DOM ノードは、例外を発生させる必要があります。ProcessingInstructionINVALID_STATE_ERR

W3は、XML(XHTML) コンテキストでinnerHTMLDOM 属性を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

于 2013-04-10T03:31:03.497 に答える
3

コロンをエスケープします。

$('div').html('<span epub\:type="pagebreak" id="pagePrefix" title="1"></span>');
于 2013-04-05T13:05:24.750 に答える