2010-06-25 8 views
0

소개 :확장 목록 정렬 스크립트

안녕하세요 여러분,

나는 그것이 내가 그것을 필요로하고 요구 한대로 작동 할 수 있도록 첨부 된 자바 스크립트 코드를 확장하는 방법에 대한 일을 찾고있다 다양한 코딩 웹 사이트에서 아무도 대답을 알지 못하는 것 같습니다. 그래서 마지막 기회에서 나는 누군가가 나를 도울 수 있기를 희망하며 여기에 왔습니다. 스크립트 소개

:

가 실행되면, 아래의 스크립트는 목록과 해당 항목의 순서에서 항목의 그룹을 (끌어 놓기로) 정렬을 수는 쿠키에 저장됩니다 정렬 순서를 변경하지 않고 페이지를 새로 고칠 수 있습니다.

문제점

첨부 된 스크립트의 문제는 단지 1 개 목록 작동하고 페이지에 추가 목록을 추가하는 것은 작동하지 않을 것입니다. (다른 목록의 항목은 정렬되거나 저장 될 수 없습니다).

요청 :

는 내가 1 개 이상의 목록을 정렬 할 수 있도록 스크립트를 확장하고 쿠키에 목록의 모든 순서를 저장할 수 있도록하고 싶습니다

는 (것이 하나 개의 쿠키 수 이 부분이 중요하지 않은 각 목록에 대한 모든 쿠키 또는 개별 쿠키) 가능한 한 간단하게 만들기 목록간에 항목을 혼합 할 필요가 없다는 점에 유의해야합니다. 각 목록의 항목을 독립적으로 정렬 한 다음 저장해야합니다./쿠키의 각 목록의 순서를 복원하십시오.

폐회 선언 :

마지막으로 그냥 더 도움이 더 나은 제공 할 수 있도록 내가 자바 스크립트 프로그래밍의 세계에 비교적 새로운 오전 말하고 싶지만 그 어떤 모든 응답을 말할 것도 것이다 대단히 감사하겠습니다.

감사합니다, 데이브

자바 스크립트 :

// set the list selector 
var setSelector = "#list1"; 
// set the cookie name 
var setCookieName = "listOrder"; 
// set the cookie expiry time (days): 
var setCookieExpiry = 7; 

// function that writes the list order to a cookie 
function getOrder() { 
    // save custom order to cookie 
    $.cookie(setCookieName, $(setSelector).sortable("toArray"), { expires: setCookieExpiry, path: "/" }); 
} 

// function that restores the list order from a cookie 
function restoreOrder() { 
    var list = $(setSelector); 
    if (list == null) return 

    // fetch the cookie value (saved order) 
    var cookie = $.cookie(setCookieName); 
    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;> 
     rebuild[items[v]] = items[v]; 
    } 

    for (var i = 0, n = IDs.length; i &lt; 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 = $("ul.ui-sortable").children("#" + item); 

      // select the item according to the saved order 
      var savedOrd = $("ul.ui-sortable").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! 
      $("ul.ui-sortable").filter(":first").append(savedOrd); 
     } 
    } 
} 

// code executed when the document loads 
$(function() { 
    // here, we allow the user to sort the items 
    $(setSelector).sortable({ 
     axis: "y", 
     cursor: "move", 
     update: function() { getOrder(); } 
    }); 

    // here, we reload the saved order 
    restoreOrder(); 
}); 

예제 html로 페이지 :

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <script type="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js"></script> 
    <script type="text/javascript" src="jquery.cookie.js"></script> 

</head> 

    <body> 
    <ul id="list1"> 
    <li id="item-1">List Item 1</li> 
    <li id="item-2">List Item 2</li> 
    <li id="item-3">List Item 3</li> 
    <li id="item-4">List Item 4</li> 
    <li id="item-5">List Item 5</li> 
    <li id="item-6">List Item 6</li> 
    </ul> 
    </body> 
</html> 

답변

0

setSelector는 '#의 목록 1'을 할당하고 적어도 변경되지 않습니다 당신이 게시 한 스크립트에서. 또한 사용하는 쿠키 값은 단일 목록의 정렬 순서 만 유지합니다.기본적으로 스크립트는 하나의 특정 요소에서만 작동하도록 하드 코드 된 것 같습니다. ul#list1

것은과 같이 함수에 JS 코드를 포장하십시오 :

function sorter(setSelector, setCookieName) { 

    /* code */ 

    $(setSelector).sortable({ /* parameters */}); 

    restoreOrder(); 

} 

을 다음 페이지에 각 목록에 대한 매개 변수로 원하는 ID와 쿠키 이름으로 정렬 함수를 호출 :

$(document).ready(function() { 
    sorter('#list1', 'listOrder-list1'); 
    sorter('#list2', 'listOrder-list2'); 
    //etc... 
}); 

그러나 코드 수정에는 몇 가지 문제가 있습니다. 하나는 ul 목록의 li 요소에서 클래스를 사용해야하는 ID를 사용하고 있습니다. ID는 웹 페이지 내에서 고유해야합니다. 동일한 ID를 사용하여 순서를 지정하는 추가 목록을 추가하면 해당 가정이 중단됩니다. 해당 ID를 클래스로 변경하고 '#'을 '.'로 바꾸십시오. 그들을 참조하는 셀렉터에서.

더 큰 문제는 상위 ul 요소를 가져 오는 데 사용하는 선택 도구라고 생각합니다. $("ul.ui-sortable")은 모든 <ul class="ui-sortable"> 요소를 가져옵니다. 대신, ...이 중 일부는 도움이 $("ul.ui-sortable")

희망의 장소에 응답

+0

감사를 이미 정의 list 변수는 내가 다른 사이트에서 주어졌다하고 스크립트가 정직보다 훨씬 더 많이 사용 내 꺼야. 며칠 전이 사이트에서 방금 발견했습니다. http://www.shopdev.co.uk/blog/sortable-lists-using-jquery-ui/ 그리고 원하는대로 작동하도록하는 방법을 알아 내려고 노력했습니다. 내가 어떤 문제에 빠지면 나는 당신의 제안을 확실히 추가 할 것이다. 나는 더 이상의 질문을하는 것이 좋을 것이라고 희망한다. 다시 한번 감사드립니다. –

+0

업데이트 : li 요소의 클래스로 ID를 변경하는 등 사용자의 지침을 따르고 $ ("ul.ui-sortable") 대신 목록 변수를 사용하도록 코드를 변경 했으므로 완벽하게 작동했습니다. 귀하의 도움과 만약 내가 할 수 있다면 당신의 도움을 위해 돈을 보내 줄 수 있지만, 나는 할 수 없다. 그러나 당신이 원한다면 FrontPage의 우리 사이트 외부 링크 섹션에 귀하의 사이트 (http://bigmooworld.com/)를 추가하는 것입니다. 지금은 매월 3 만 5 천 건의 순식간에 히트 수를 얻을 수 있기 때문에 결국 돈보다 낫다. –

+0

원하면 원하면 링크해라. 그러나 내 홈페이지는 현재 내가 아직 생각하지 못한 미래의 웹 사이트 아이디어를위한 껍질에 불과하다. 지금은 그냥 행복한 개구리 이미지입니다. 내가 결코 게시하지 않는 블로그 페이지 인 http://bigmooworld.com/mblog에 링크 할 수는 있지만, SFWness가 보장되지는 않습니다. 아니면 전혀 지불하지 않아도됩니다. 나에겐 충분하다. – MooGoo