使用Javascript将数据移动到顶部或底部
好的,刚刚被分配到一个新项目,以前从未处理过Javascript。现在,数据在网格中上下移动,代码如下。我需要在case语句中添加一个“top”和“bottom”,用户可以将所选行移动到网格的顶部或底部。我试图用谷歌搜索答案,但运气不太好。任何关于我可以在哪里继续搜索的建议都会很有帮助 好的,新的一期。我添加了一些我创建的代码。在“top”和“bottom”下的case语句中,我添加的代码允许我选择一个项目并将其移动到列表的最顶端。但是把它移到底部,IE告诉我脚本需要很长时间。有什么建议吗 没关系,我让代码工作了。下面是工作代码使用Javascript将数据移动到顶部或底部,javascript,Javascript,好的,刚刚被分配到一个新项目,以前从未处理过Javascript。现在,数据在网格中上下移动,代码如下。我需要在case语句中添加一个“top”和“bottom”,用户可以将所选行移动到网格的顶部或底部。我试图用谷歌搜索答案,但运气不太好。任何关于我可以在哪里继续搜索的建议都会很有帮助 好的,新的一期。我添加了一些我创建的代码。在“top”和“bottom”下的case语句中,我添加的代码允许我选择一个项目并将其移动到列表的最顶端。但是把它移到底部,IE告诉我脚本需要很长时间。有什么建议吗 没关
function move(direction) {
try {
if (CSAdmin.selectedItem.element &&
CSAdmin.selectedItem.ID) {
var row = CSAdmin.selectedItem.element;
var node =
getNode(CSAdmin.selectedItem.type, CSAdmin.selectedItem.ID);
if (node) {
var sibling = null;
var rowSibling = null;
var parent = node.parentNode;
var rowParent = row.parentNode;
switch (direction) {
case "up":
{
sibling = node.previousSibling;
if (sibling) {
parent.removeChild(node);
parent.insertBefore(node, sibling);
}
//Move the table row
rowSibling = row.previousSibling;
if (rowSibling) {
rowParent.removeChild(row);
rowParent.insertBefore(row, rowSibling);
}
break;
}
case "down":
{
sibling = node.nextSibling;
if (sibling) {
parent.removeChild(sibling);
parent.insertBefore(sibling, node);
}
//Move the table row if it isn't the insert row
rowSibling = row.nextSibling;
if (rowSibling && rowSibling.id.indexOf("new", 0) == -1) {
rowParent.removeChild(rowSibling);
rowParent.insertBefore(rowSibling, row);
}
break;
}
case "top":
{
sibling = node.previousSibling;
while (sibling) {
if (sibling) {
parent.removeChild(node);
parent.insertBefore(node, sibling);
sibling = node.previousSibling;
}
}
//Move the table row
rowSibling = row.previousSibling;
while (rowSibling) {
if (rowSibling) {
rowParent.removeChild(row);
rowParent.insertBefore(row, rowSibling);
rowSibling = row.previousSibling;
}
}
break;
}
case "bottom":
{
sibling = node.nextSibling;
while (sibling) {
if (sibling) {
parent.removeChild(sibling);
parent.insertBefore(sibling, node);
sibling = node.nextSibling;
}
}
//Move the table row if it isn't the insert row
rowSibling = row.nextSibling;
while (rowSibling && rowSibling.id.indexOf("new", 0) == -1) {
if (rowSibling && rowSibling.id.indexOf("new", 0) == -1) {
rowParent.removeChild(rowSibling);
rowParent.insertBefore(rowSibling, row);
rowSibling = row.nextSibling;
}
}
break;
}
}
}
}
}
catch (err) {
throw new Error("Error moving row:" + err.description);
}
现有代码中的变量名有点混乱(您甚至没有告诉我们什么是
节点
),但这是使其工作的基本前提。在本例中,我使用jQuery简化了工作,但逻辑是合理的,不依赖于jQuery
移动到底部基本上是一样的,只是需要lastRow和insertAfter
var lastRow = currentRow.parentNode.childNodes[currentRow.parentNode.childNodes.length - 1];
currentRow.parentNode.insertAfter(currentRow, lastRow);
我真的不明白你的问题。请添加一个您正在尝试实现的/您已经拥有的示例。我拥有的是datagrid。如果您选择一行并点击向上或向下按钮,您可以一次向上或向下移动一行。我想添加一个“移动到顶部”和“移动到底部”按钮,将该行移动到网格顶部或底部。上面的代码当前将一次向上或向下移动一行。很抱歉造成混淆,这不是我的代码。它属于不再在这里的开发人员。我正试着自己弄清楚这一切。从我可以看出,node的selectedItem类型和ID很小。我只基于这一行var node=getNode(CSAdmin.selectedItem.type,CSAdmin.selectedItem.ID);这不是一个完全正确的答案,但它是下一个基于它的东西,它让我知道javascript在做什么,并让我意识到如何正确地做。
var lastRow = currentRow.parentNode.childNodes[currentRow.parentNode.childNodes.length - 1];
currentRow.parentNode.insertAfter(currentRow, lastRow);