2017-05-30 14 views
1

当使用Dojo的未压缩源时,我注意到有些奇怪,我们的代码正常运行时没有错误。我想这两个从档案至今使用Dojo的内置版本时出错(但不是未压缩的源文件)

道场释放-1.10.6-src和道场释放-1.10.8-SRC

但是当我切换到内置的版本,无论是

道场释放-1.10.6或道场释放-1.10.8

有,使用dojo.query

TypeError: root.getElementsByTagName is not a function

我的函数调用时发生错误,看起来像这样

var dom_frag = domConstruct.toDom(response); 
var title = dojo.query(".accordion_title", dom_frag)[0]; 

其中响应包含HTML字符串。 (太长,张贴在这里)

编辑:调试器的图像显示

enter image description here

enter image description here

+0

您是否检查过使用构建的dojo版本是否将'response'正确转换为DOM? (像'console.log(dom_frag)')考虑用需要'dojo/query' [模块]替代已弃用的'dojo.query'(https://dojotoolkit.org/reference-guide/1.10/dojo/query.html #usage) – barbsan

+0

@barbsan添加图像以显示它已成功转换为文档片段,将尝试使用dojo /查询,谢谢 – erotavlas

+0

@barbsan使用dojo/query无效 - 同样的错误,尽管如何知道dojo.query是折旧的? – erotavlas

回答

2

好的,你有没有检查过,看看是否dom _frag变量是单个DOM节点?如果dom片段是多个节点,那么dojo.query将不起作用,因为它需要搜索单个dom节点的子节点。 为了解决这个问题,尝试用一个单一的节点包裹toDom内容......像这样:

var dom_frag = domConstruct.toDom("<div>"+response+"</div>"); 
var title = dojo.query(".accordion_title", dom_frag)[0]; 

这是当然的,一个黑客位的...但如果你不能保证响应将结束一个节点,那么你需要这样做。

0

确保您root实际上是一个DOM元素作为 'dom_frag' 的内容:

the Element.getElementsByTagName() method returns a live HTMLCollection of elements with the given tag name. The subtree underneath the specified element is searched, excluding the element itself. Ref .

+0

并非如此,它可以在任何HTML元素上调用。请参阅[MDN](https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName) – barbsan

+0

@barbsan谢谢,我对我的回答进行了编辑:) – GibboK

相关问题