使用jquery注入一个带有冒号属性的标签
Injecting a tag having an attribute with colon in it using jquery
我正在尝试使用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
有解决这个问题的方法吗?
当你将序列化的DOM节点传递给$('div').html()
时,jQuery使用innerHTML
。只要您的DOCTYPE
是html
的任何类型,这就可以正常工作。但是,对于xhtml
的DOCTYPE
,序列化的DOM节点必须在插入到文档之前清除一些额外的情况。根据W3.org,包含Attr
节点、Text
节点、CDATASection
节点、Comment
节点或ProcessingInstruction
节点的序列化DOM节点,其数据包含XML Char生成不匹配的字符(包括U+003A冒号":"),必须引发INVALID_STATE_ERR
异常。
W3还指定了在XML(XHTML)上下文中对HTMLElements
和HTMLDocuments
设置innerHTML
DOM属性时用户代理必须运行的算法。该算法的第二步是:
如果在元素上设置了
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。
转义冒号:
$('div').html('<span epub':type="pagebreak" id="pagePrefix" title="1"></span>');
$('div').append('<span />').attr('epub':type', 'pagebreak').attr('id', 'pagePrefix').attr('title', '1');
相关文章:
- 查找所有TD标签并读取其数据属性
- 使用json数据更改视频标签中的src属性
- 在jquery中,从同一对象的属性设置输入字段和标签的正确方法是什么
- 至于所有输入的标签都用指定的属性来设置,例如属性检查=false
- 使用 Div 标签的 location.href 属性时,Eval 不起作用
- SEO机器人是否总是遵循A标签的href属性中的URL,即使点击/点击被Javascript拦截
- 如何在 javascript 中为没有值的标签选择属性
- 使用父标签中的样式属性附加新标签
- 如何在 jquery 和 javascript 中检索 html 标签属性
- JavaScript-多次创建具有相同属性的标签
- Wordpress:如何更改图像标签中的源属性
- Wicket:获取标签属性
- 使用jQuery通过更改src属性来设置一个图像标签的动画
- 标签的属性在角度方向上不起作用
- Knockout.js中使用的唯一ID;对于“;单选按钮组中的标签属性
- 如何使用jQuery在属性标签中选择元素ID
- 如何在 struts2 属性标签中给出 javascript 函数和 css 样式
- 创建“title"属性标签
- 访问和更改