我正在尝试使用jquery在div中注入span。
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
任何解决方法吗?
答案 0 :(得分:5)
当您将序列化的DOM节点传递给innerHTML
时,jQuery使用$('div').html()
。只要DOCTYPE
是html
的任何风格,这都可以正常工作。但是,对于DOCTYPE
xhtml
,您的序列化DOM节点必须在插入文档之前清除some additional cases。根据{{3}},包含Attr
节点,Text
节点,CDATASection
节点,Comment
节点或ProcessingInstruction
节点的序列化DOM节点数据包含与XML Char生成不匹配的字符(包括U + 003A COLON“:”)必须引发INVALID_STATE_ERR
异常。
W3.org还指定用户代理在XML(XHTML)上下文中的innerHTML
和HTMLElements
上设置HTMLDocuments
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>');
答案 1 :(得分:3)
逃离冒号:
$('div').html('<span epub\:type="pagebreak" id="pagePrefix" title="1"></span>');
答案 2 :(得分:1)
$('div').append('<span />').attr('epub\:type', 'pagebreak').attr('id', 'pagePrefix').attr('title', '1');