Uncaught SyntaxError: Failed to set the 'innerHTML' property on 'Element': The provided markup is invalid XML
Uncaught SyntaxError: Failed to set the 'innerHTML' property on 'Element': The provided markup is invalid XML
我正在尝试在我的 Rails 4 应用程序中放置一个日期时间选择器。我决定试试这个:https://github.com/Eonasdan/bootstrap-datetimepicker.
指令比较简单,但是当我加载页面时,我收到以下 JS 错误消息:
Uncaught SyntaxError: Failed to set the 'innerHTML' property on 'Element': The provided markup is invalid XML, and therefore cannot be inserted into an XML document.
如果我在 JQuery.extend.buildfragment 中发生这种情况的行上暂停:
tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<></>" ) + wrap[2];
我看到它正在尝试将 innerHTML 设置为:
<div class="bootstrap-datetimepicker-widget dropdown-menu"><div class="datepicker"><div class="datepicker-days"><table class="table-condensed"><thead><tr><th class="prev">‹</th><th colspan="5" class="picker-switch"></th><th class="next">›</th></tr></thead><tbody></tbody></table></div><div class="datepicker-months"><table class="table-condensed"><thead><tr><th class="prev">‹</th><th colspan="5" class="picker-switch"></th><th class="next">›</th></tr></thead><tbody><tr><td colspan="7"></td></tr></tbody></table></div><div class="datepicker-years"><table class="table-condensed"><thead><tr><th class="prev">‹</th><th colspan="5" class="picker-switch"></th><th class="next">›</th></tr></thead><tbody><tr><td colspan="7"></td></tr></tbody></table></div></div></div>
大多数 XML 验证者抱怨 ‹
值无效。但是,我无法控制这个字符串的构造方式,因为这是 jquery 的内部结构。我知道日期时间选择器适用于大多数人,没有任何问题,所以这在我的环境中似乎有问题。
问题是页面被提供为 XHTML+XML,而不是 HTML(感谢 @Pointy 指出了这一点)。
我发现在我的application_controller.rb里面有一行如下:
before_filter{ response.content_type = 'application/xhtml+xml' }
我实际上不知道为什么会出现这一行,但是删除这一行解决了问题并让我继续前进。
XHTML 不支持 document.write
或 .innerHTML
。由于 jQuery 使用这些方法之一插入新代码,所有 XHTML 兼容的浏览器都会出错。
带有 application/xhtml+xml
的 XHTML 不支持使用以下任何一种 jQuery 方法对源进行原始修改:.append()
、.html()
、.insert...()
等.
相反,查询一些 JSON 数据并将 AJAX 接收到的值插入到使用 .text()
/ .val()
的预定义标签中或动态创建这些节点使用 document.createElement('someTag')
.
我正在尝试在我的 Rails 4 应用程序中放置一个日期时间选择器。我决定试试这个:https://github.com/Eonasdan/bootstrap-datetimepicker.
指令比较简单,但是当我加载页面时,我收到以下 JS 错误消息:
Uncaught SyntaxError: Failed to set the 'innerHTML' property on 'Element': The provided markup is invalid XML, and therefore cannot be inserted into an XML document.
如果我在 JQuery.extend.buildfragment 中发生这种情况的行上暂停:
tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<></>" ) + wrap[2];
我看到它正在尝试将 innerHTML 设置为:
<div class="bootstrap-datetimepicker-widget dropdown-menu"><div class="datepicker"><div class="datepicker-days"><table class="table-condensed"><thead><tr><th class="prev">‹</th><th colspan="5" class="picker-switch"></th><th class="next">›</th></tr></thead><tbody></tbody></table></div><div class="datepicker-months"><table class="table-condensed"><thead><tr><th class="prev">‹</th><th colspan="5" class="picker-switch"></th><th class="next">›</th></tr></thead><tbody><tr><td colspan="7"></td></tr></tbody></table></div><div class="datepicker-years"><table class="table-condensed"><thead><tr><th class="prev">‹</th><th colspan="5" class="picker-switch"></th><th class="next">›</th></tr></thead><tbody><tr><td colspan="7"></td></tr></tbody></table></div></div></div>
大多数 XML 验证者抱怨 ‹
值无效。但是,我无法控制这个字符串的构造方式,因为这是 jquery 的内部结构。我知道日期时间选择器适用于大多数人,没有任何问题,所以这在我的环境中似乎有问题。
问题是页面被提供为 XHTML+XML,而不是 HTML(感谢 @Pointy 指出了这一点)。
我发现在我的application_controller.rb里面有一行如下:
before_filter{ response.content_type = 'application/xhtml+xml' }
我实际上不知道为什么会出现这一行,但是删除这一行解决了问题并让我继续前进。
XHTML 不支持 document.write
或 .innerHTML
。由于 jQuery 使用这些方法之一插入新代码,所有 XHTML 兼容的浏览器都会出错。
带有 application/xhtml+xml
的 XHTML 不支持使用以下任何一种 jQuery 方法对源进行原始修改:.append()
、.html()
、.insert...()
等.
相反,查询一些 JSON 数据并将 AJAX 接收到的值插入到使用 .text()
/ .val()
的预定义标签中或动态创建这些节点使用 document.createElement('someTag')
.