dojo domconstruct.place给出错误Uncaught TypeError:Object [object Object]没有方法'appendChild'

时间:2013-08-08 13:52:52

标签: dojo ibm-mobilefirst

用法domconstruct = http://dojotoolkit.org/reference-guide/1.9/dojo/dom-construct.html#dojo-dom-construct-place

place()的第二个参数是

refNode String | DomNode应放置节点的DOM节点。如果是字符串,则假定它是节点的ID

它说我可以使用DOM节点,所以我试图用jquery获取domnode - >错误 也尝试使用Dojo的查询() - >同样的错误

错误:

    Uncaught TypeError: Object [object Object] has no method 'appendChild' 

我的代码         domConstruct.place(errorBoxHtml,$(“#”+ currentView.id +“。content”),“first”);

3 个答案:

答案 0 :(得分:1)

dojo/query并且jQuery的选择器没有返回正确的DOM节点,而是返回列表的节点。

您可以在this JSFiddle上看到使用jQuery的示例。正如您在控制台中看到的那样,它表示"No it isn't",这意味着它没有返回您编写的选择器的DOM节点,您甚至可以在控制台中看到它实际返回的内容(DOM节点数组)

我也在这个JSFiddle中使用Dojo做了同样的例子。正如您在那里看到的那样,dojo/query不返回DOM节点,而是返回DOM节点列表。但是,当您使用dojo/dom模块和方法byId()时,您将获得一个DOM节点。

这解释了为什么您的代码不起作用。如果您正在使用查询,则可以使用dojo/NodeList-dom独立获取所有节点并在每个节点上调用该函数,或者如果您确定只有1个DOM节点,则还可以使用:

require(["dojo/query", "dojo/domReady!"], function(query) {
    var myNode = query("...")[0];
});

但是我认为你正在使用的模块有问题。查询用于检索零到多个结果,您应该以这种方式使用它。如果你想获得一个特定的DOM节点,你应该使用ID来识别它,并使用dojo/dom模块,因为它是为了这个目的而制作的。

答案 1 :(得分:0)

我认为你有可能没有得到一个合适的domNode(正如Dojo所理解的那样)。为什么不使用dojo.byId API来获取它?

答案 2 :(得分:0)

如果我有id,我可以在函数中输入id作为字符串。这很好。我的div只有一个类名,但我给了他们所有的id。现在我可以在函数

中将id作为字符串用作'refNode'参数