如何一起使用dojo.query()和dojo.place()?

时间:2013-10-15 20:32:58

标签: javascript dojo

我正在尝试创建一个动态表,在整个使用过程中添加和删除行。我不想把id放在我后来想要引用的每个容器上。

例如,我想在动态添加的行的最后一个单元格中添加一个隐藏的输入。该行有一个id,当我在最后一个单元格上没有id时,如何使用dojo.place()?

var pmrCount = dojo.query("#pmhTable >tbody >tr").length;
var rowID = 'pmr_' + pmrCount;

var newPmrRow = 
    '<tr id="' + rowID + '">' +
        '<td>' + pmh + '</td>' +
        '<td>' + String(pmr.severity).charAt(0) + '</td>' + 
        '<td>' + pmr.customerName + '</td>' + 
        '<td>' + pmr.deviceType + '</td>' + 
        '<td>' + pmr.deviceModel + '</td>' +
        '<td>' + pmr.deviceSerial + '</td>' +
        '<td align="center"><a class="cancel-link"></a></td>' + 
    '</tr>';

//dojo.place(newPmrRow, dojo.query("#pmhTable >tbody"));

var newPmrHiddenInput = 
    '<input type="hidden" name="pmrs" value="'+ JSON.stringify(pmr)+ '">';

//dojo.query("#" + rowID + " td:last").place(newPmrHiddenInput);

这两行注释代码是我试图用功能代码替换的代码。这些不起作用,它们不像其他语法错误那样在错误控制台中显示任何警告。不知道从哪里开始。

我知道dojo.query()返回一个NodeList,而place()期待一个DOM节点或一个id。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您想查看Nodelist的dojo/NodeList-dom扩展名。它允许您将NodeList中的每个元素放入基于查询选择器的元素中。在AMD Style中它看起来像:

require(['dojo/dom-construct', 'dojo/NodeList', 'dojo/NodeList-dom', 'dojo/domReady!'], function (domConstruct, NodeList) {
    var nodes = new NodeList([domConstruct.toDom('<div>someContent</div>')]);
    nodes.place('#x');

});

看着文档,我有点惊讶,没有一种更简单的方法可以做到这一点,所以也许有比这更好的方法。

答案 1 :(得分:0)

好吧,我发现两行代码似乎有效,但我不知道引用数组样式的NodeLists在技术上是否正确。这就是我所做的。

dojo.place(newPmrRow, dojo.query("#pmhTable >tbody")[0]);
dojo.place(newPmrHiddenInput, dojo.query("#" + rowID + "> td:last-child")[0]);