好的,刚刚被分配到一个新项目,并且之前从未处理过Javascript。现在,数据使用下面的代码在网格中上下移动。我需要在case语句中添加一个“top”和“bottom”,用户可以将所选行移动到网格顶部或底部。我试图谷歌搜索答案,但没有太多运气。关于我可以继续搜索的任何建议都会有所帮助。
好的新问题。我添加了一些我创建的代码。它位于“top”和“bottom”下的case语句中。我添加的代码允许我选择一个项目并将其移动到列表的最顶部。但是将它移到底部并且IE告诉我脚本需要很长时间。 ANY建议?
没关系我让代码正常工作。以下是工作代码。
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);
}
答案 0 :(得分:1)
现有代码中的变量名称有点令人困惑(您甚至不告诉我们node
是什么),但这是使其工作的基本前提。我使用jQuery来简化这个例子中的工作,但逻辑是合理的,不依赖于jQuery。
//move to top
var currentRow = $(this).closest('tr')[0];
var firstRow = currentRow.parentNode.childNodes[0];
currentRow.parentNode.insertBefore(currentRow, firstRow);
除了你想要lastRow和insertAfter之外,移动到底部基本相同。
var lastRow = currentRow.parentNode.childNodes[currentRow.parentNode.childNodes.length - 1];
currentRow.parentNode.insertAfter(currentRow, lastRow);