0

这是我的 HTML 代码:

<div id="contextToolBar" class="dijitToolbar xwtContextualToolbar" wairole="menubar" role="menubar" widgetid="contextToolBar">

<table class="xwtContextualToolbarRibbonContainer" cellspacing="0" cellpadding="0" border="0" dojoattachpoint="_contextualToolbarTable">

<tbody class="xwtContextualToolbarRibbonContainerTB">
<tr class="xwtContextualToolbarRibbonContainerTR">
<td> </td>

<td class="xwtContextualToolbarRibbonContainerTD" vertical-align="top" cellspacing="0" cellpadding="0"> </td>

<td vertical-align="top">
***<div class="xwtQuickFilter" dojoattachpoint="quickFilterNode">***
</td>
</tr>
</tbody>
</table>
</div>

我想在之前添加另一个 div 并且我在我的 JS 中执行以下操作:

var flagId =dojo.query("#contextToolBar .xwtContextualToolbarRibbonContainer .xwtContextualToolbarRibbonContainerTB .xwtContextualToolbarRibbonContainerTB .xwtQuickFilter");

var n = dojo.create("div",  {
    id: "informationDialog", 
    dojoType: "dijit.form.Button", 
    iconClass: "xwtContextualIcon xwtContextualAddRow", 
    showLabel: "false", 
    onclick: "return showClusterInstallationDialog();"
}, flagId, "first");

但我得到一个TypeError: doc is undefined. 我想我没有得到flagId正确的。我做错了什么?

然后我尝试使用domConstruct.create而不是dojo.create,但它给了我错误为undefined.

4

3 回答 3

1

dojo.query返回 a NodeList,因此当使用它尝试添加新 div 时,您会看到看到的异常。

var node;
dojo.query(
    "#contextToolBar .xwtContextualToolbarRibbonContainer .xwtContextualToolbarRibbonContainerTB .xwtContextualToolbarRibbonContainerTB .xwtQuickFilter")
    .forEach(function(n) { node = n; });

如果要在 之前添加新节点node,则使用before,而不是firstfirst将它作为第一个元素添加到子集合中。

var newnode = dojo.create('div, {}, node, 'before');
于 2013-06-03T11:29:59.603 回答
0

首先,您不应该在 HTML 代码中放置 Javascript 或 CSS。它使代码可读且不可维护(如果这是一个词)。你应该分开你的文件玩具让你的生活更轻松。

要将一个元素放在另一个元素之前,您应该使用 domConstruct,显然您已经这样做了,但是您必须在页面加载完成后调用所有函数。

当您编写 javascript 代码并将其注入 HTML 代码时,有时代码会在实际页面和您正在寻找的元素之前加载。要解决这个问题,您可以使用准备好的 dojo并从调用/注册任何其他函数中。

希望这可以帮助

于 2013-06-03T11:24:22.143 回答
0

您使用的是哪个版本的道场?如果您使用 dojo 1.7 及更高版本,我认为这是您应该做的正确的事情,它是 dojo/ready 模块。还有dojo/domReady!如果我没有完全错,你可以使用它。

于 2013-06-10T21:14:20.703 回答