2012-01-19 134 views
0

好了剛剛分配到一個新的項目,之前從未涉及的Javascript。現在數據在下面的代碼中上下移動。我需要添加到case語句「頂」和「底」,將用戶的移動選定行網格或底部或者頂部。我試圖谷歌搜索答案,但沒有太多的運氣。任何關於我可以繼續搜索的建議都會有所幫助。將數據移動到頂部或底部的W/Java腳本

確定新的問題。我添加了一些我創建的代碼。這是在「頂部」和「底部」的情況下的聲明我添加的代碼允許我選擇一個項目並將其移動到列表的最頂端。但將它移到底部,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

我真的不明白你的問題。請添加您想要實現的內容/您已擁有的內容的示例。 –

+0

我所擁有的是一個數據網格。如果選擇一行並按下向上或向下按鈕,則可以一次向上或向下移動一行。我想添加Move To Top和Move To Bottom按鈕,將該行移動到網格頂部或底部。目前上面的代碼將會一次向上或向下移動一行。 – cjohnson2136

回答

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); 
+0

對不起,這不是我的代碼。它屬於一個開發人員不再在這裏。我正在努力把它全部弄清楚。從我可以告訴節點苗條的selectedItem類型和ID。我只此線無功節點= getNode(CSAdmin.selectedItem.type,CSAdmin.selectedItem.ID)上此基礎; – cjohnson2136

+0

這不是完全正確的答案,但它是下一個基礎的東西,它允許我弄清楚JavaScript在做什麼,並讓我意識到如何正確地做到這一點。 – cjohnson2136

相關問題