2009-05-25 102 views
0

如何在div中保存元素位置?jquery保存元素位置(序列化?)

我使用序列化,如果是,我該怎麼做?

我有這個div:

<div id="produtlist"> 
    <img id="productid_10" src="images/pic10.jpg" class="sortableproduct" alt="" title="" /> 
    <img id="productid_11" src="images/image1.jpg" class="sortableproduct" alt="" title="" /> 
    <img id="productid_12" src="images/image2.jpg" class="sortableproduct" alt="" title="" /> 
    <img id="productid_13" src="images/pic1.jpg" class="sortableproduct" alt="" title="" /> 
    <img id="productid_14" src="images/pic2.jpg" class="sortableproduct" alt="" title="" /> 
    <img id="productid_15" src="images/pic3.jpg" class="sortableproduct" alt="" title="" /> 
</div> 

回答

0

我在我的一個項目中使用了類似的函數,並且準備好了一段代碼來恢復排序。該函數採用2個參數:

  1. 列表容器
  2. 保持逗號該Cookie分離的ID。

我用它來重新安排UL根據名單,但應該工作在你的情況太細...

// Function that restores the list order from a cookie 
function restoreOrder(_list, _cookie) { 

    var list = $('#' + _list); 
    if(list == null) return; 

    // fetch the cookie value (saved order) 
    var cookie = $.cookie(_cookie); 

    if(!cookie) return; 

    // make array from saved order 
    var IDs = cookie.split(","); 

    // fetch current order 
    var items = list.sortable("toArray"); 

    // make array from current order 
    var rebuild = new Array(); 
    for(var v = 0, len = items.length; v < len; v++) 
     rebuild[items[v]] = items[v]; 

    for(var i = 0, n = IDs.length; i < n; i++) { 

     // item id from saved order 
     var itemID = IDs[i]; 

     if(itemID in rebuild) { 

      // select item id from current order 
      var item = rebuild[itemID]; 

      // select the item according to current order 
      var child = $('#' + _list).children('#' + item); 

      // select the item according to the saved order 
      var savedOrd = $('#' + _list).children('#' + itemID); 

      // remove all the items 
      child.remove(); 

      // add the items in turn according to saved order 
      // we need to filter here since the "ui-sortable" 
      // class is applied to all ul elements and we 
      // only want the very first! You can modify this 
      // to support multiple lists - not tested! 
      $('#' + _list).filter(':first').append(savedOrd); 

     } // if 

    } // for 

} // restoreOrder 

我已經忘記了原來的(一些論壇或博客,就知道了而谷歌搜索)...但由於原作者得分。我已經修改了原來的一些例程,以便通過接受這些參數使它更加可重用。

乾杯, 微觀^世人

0

那麼,如果你只需要記住的順序,你可以只塞子以逗號分隔的ID的字符串到一個cookie?並在頁面加載時將其拉出。

就我所知,序列化只對表單數據有效,對DOM元素不起作用。

爲了解決您的評論,你會使用簡單的jQuery的頁面建立一個CSV:

var list = ''; 
$('#productlist .sortableproduct').each(function() { 
    list += this.attr('id') + ','; 
}); 

然後保存列表一個cookie,或者將其發送回服務器。

把事情放回他們的順序有點困難。如果您將字符串發送回服務器,那麼以正確的順序輸出內容會簡單得多......但您可以使用jquery中的DOM工具來移動DOM對象。任何方式都很簡單。

+0

是的,但我怎麼retreive的DOM元素的順序? – Cudos 2009-05-25 09:30:28

+0

就像那樣。這很簡單。 – Oli 2009-05-25 10:00:35