使用/ Javascript将数据移至顶部或底部

时间:2012-01-19 16:59:34

标签: javascript

好的,刚刚被分配到一个新项目,并且之前从未处理过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);
}

1 个答案:

答案 0 :(得分:1)

现有代码中的变量名称有点令人困惑(您甚至不告诉我们node是什么),但这是使其工作的基本前提。我使用jQuery来简化这个例子中的工作,但逻辑是合理的,不依赖于jQuery。

http://jsfiddle.net/qukDJ/

//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);