如何从[对象HTMLUListElement]中将UL从cookie转换为数组?

时间:2016-05-02 18:16:22

标签: javascript arrays cookies html-lists

如何从Cookie中获取 [对象HTMLUListElement] 的内容。 (内容如下:

<ul id="checklist">
<li class="listItem" draggable="true">1</li>
<li class="listItem" draggable="true">2</li>
<li class="listItem" draggable="true">3</li>
<li class="listItem" draggable="true">4</li>
<li class="listItem" draggable="true">5</li>
<li class="listItem" draggable="true">6</li>
</ul>

如何从[对象HTMLUListElement]中取回它并将其传回JavaScript中的数组?

任何帮助或建议表示赞赏!

2 个答案:

答案 0 :(得分:0)

你可以试试这个: 我假设您的Cookie数据HTMLUListElement位于cookObj变量中。

你可以写:

var cookObj;
for (var dVal in cookObj){
    console.log(dVal[member]);
}

并且,在检查元素的帮助下检查打印了哪些文本。


function getCookie(name)
  {
    var re = new RegExp(name +“=([^;] +)”);
    var value = re.exec(document.cookie);
    return(value!= null)? unescape(value [1]):null;
  }


要显示名为UlCookie的cookie的值:



  文件撰写(的getCookie( “UlCookie”));

答案 1 :(得分:0)

我终于让cookie工作了。

问题是cookie中的数据是[object htmlulistelement]作为字符串,而不是列表数据本身。

现在ulCookie中的数据是正确的,并且函数getCookie(cname)就像http://www.w3schools.com/js/js_cookies.asp一样,数据被正确检索。

同样重要的是在加载cookie之后添加Eventlisteners,如果存在cookie ...

http://www.w3schools.com/js/js_cookies.asp是一个有用的链接

请参阅此片段以了解我的最终版本。 (我不得不分开js文件(cookies.js和main.js,我不知道如何在代码片段中实现它,所以它可能在这里不起作用。我在js中评论了哪个文件开始。)

最终工作的readCookie代码(cname是cookie的名称):

function readCookie(document) {
  console.log(cname);
  function getCookie(cname) {
      var name = cname + "=";
      var ca = document.cookie.split(';');
      for (var i = 0; i < ca.length; i++) {
          var c = ca[i];
          while (c.charAt(0) == ' ') {
              c = c.substring(1);
          }
          if (c.indexOf(name) == 0) {
              return c.substring(name.length, c.length);
          }
      }
      return "";
  }
  console.log(getCookie(cname));
};

整个代码如下:

// code by Friso NL - frisog at gmail .com

// events to create according ot: http://www.html5rocks.com/en/tutorials/dnd/basics/
//
// dragstart
// drag
// dragenter
// dragleave
// dragover
// drop
// dragend


// main.js //
window.onload = function() {

  window.parentOfItemslist = document.getElementById('checklist');
  // console.log(listItems);


  window.addEventListeners = function(listItems) {
    for (i = 0; i < listItems.length; i++) {
      window.listItem = listItems[i];


      listItem.setAttribute("order-id", i);



      listItem.addEventListener('dragstart', handleDragStart, false)
      listItem.addEventListener('dragenter', handleDragEnter, false)
      listItem.addEventListener('dragover', handleDragOver, false)
      listItem.addEventListener('dragleave', handleDragLeave, false)
      listItem.addEventListener('drop', handleDrop, false)
      listItem.addEventListener('dragend', handleDragEnd, false)
    }
  };




  window.listItems; // window.variable makes it global! instead of var = ...;

  window.createListInitial = function(e) {

    var listItmesWithoutExtra = document.querySelectorAll('.listItem');
    console.log(listItmesWithoutExtra);
    var extraLi = document.createElement("LI");

    extraLi.classList.add("ghostLi", "listItem");
    console.log(extraLi);
    var arrayListItmesWithoutExtra = Array.prototype.slice.call(listItmesWithoutExtra, 0);

    arrayListItmesWithoutExtra.push(extraLi);
    listItems = arrayListItmesWithoutExtra;

    console.log(listItems);
    window.parentOfItemslist = document.getElementById('checklist');
    console.log(parentOfItemslist);
    parentOfItemslist.innerHTML = "";
    for (i = 0; i < listItems.length; i++) {
      parentOfItemslist.appendChild(listItems[i]);
    }
    console.log(listItems);
    addEventListeners(listItems);
  };





  window.checkCurrentListItems = function(e) {
    var listItems = document.querySelectorAll('.listItem');
    return listItems;
  }

  var dragSrcEl = null;

  function handleDragStart(e) {
    this.className += " dragStartClass";
    dragSrcEl = this;

    e.dataTransfer.effectAllowed = 'move';
    e.dataTransfer.setData('text/html', this.innerHTML);
    // e.dataTransfer.setDragClass("dataTransferClass");

  }

  function handleDragOver(e) {
    // if (e.preventDefault) { not needed according to my question and anwers on : http://stackoverflow.com/questions/36920665/why-if-statement-with-e-preventdefault-drag-and-drop-javascript
    e.preventDefault();
    // }
    e.dataTransfer.dropEffect = 'move'; // sets cursor
    return false;

  }

  function handleDragEnter(e) {
    // this / e.target is the current hover target.
    this.classList.add('over');
  }

  function handleDragLeave(e) {
    this.classList.remove('over'); // this / e.target is previous target element.
  }

  window.handleDrop = function(e) {


    checkCurrentListItems();
    e.stopPropagation(); // stops the browser from redirecting.
    dragSrcOrderId = parseInt(dragSrcEl.getAttribute("order-id"));
    dragTargetOrderId = parseInt(this.getAttribute("order-id"));
    var tempThis = this;


    // Don't do anything if dropping the same column we're dragging.
    // and
    // check if only one difference and then do not execute
    // && ((Math.abs(dragSrcOrderId - dragTargetOrderId)) != 1)
    if (dragSrcEl != this) {
      // Set the source column's HTML to the HTML of the column we dropped on.
      var tempThis = this;

      function makeNewOrderIds(tempThis) {
        // check if up or down movement

        dragSrcEl.setAttribute("order-id", dragTargetOrderId);
        tempThis.setAttribute("order-id", dragTargetOrderId);

        //  find divs between old and new location and set new ids - different in up or down movement (if else)
        if (dragSrcOrderId < dragTargetOrderId) {
          for (i = dragSrcOrderId + 1; i < dragTargetOrderId; i++) {
            listItems[i].setAttribute("order-id", i - 1);
            // set new id src
            dragSrcEl.setAttribute("order-id", dragTargetOrderId - 1);
          }
        } else {
          for (i = dragTargetOrderId; i < dragSrcOrderId; i++) {
            listItems[i].setAttribute("order-id", i + 1);
            // set new id src
            dragSrcEl.setAttribute("order-id", dragTargetOrderId);

          }
        }

      };
      makeNewOrderIds(tempThis);


      dragSrcEl.classList.remove("dragStartClass");
      this.classList.remove('over'); // this / e.target is previous target element.
      reOrder(listItems);




    } else {

      dragSrcEl.classList.remove("dragStartClass");
      return false;

    }

  };

  function handleDragEnd(e) {

    for (i = 0; i < listItems.length; i++) {
      listItem = listItems[i];
      listItem.classList.remove('over');
    }
    dragSrcEl.classList.remove("dragStartClass");


  }



  window.reOrder = function(listItems) {


    var tempListItems = listItems;
    tempListItems = Array.prototype.slice.call(tempListItems, 0);

    tempListItems.sort(function(a, b) {
      return a.getAttribute("order-id") - b.getAttribute("order-id");
    });



    window.parentOfItemslist = document.getElementById('checklist');
    parentOfItemslist.innerHTML = "";

    for (var i = 0, l = tempListItems.length; i < l; i++) {
      parentOfItemslist.appendChild(tempListItems[i]);
    }

    createCookie(document);

  };

  CheckIfCookie(document);


};


// cookies.js //

window.cname = "ulCookie";
window.exdays = 20;

function CheckIfCookie(document) {


  if (document.cookie) {
    console.log("cookie!");

    readCookieAndSetLu(document);
    // read cookie


  } else {

    createListInitial();
    console.log(listItems);

  };
};

function createCookie(document) {
  // call this after drop and update of listItems
  window.cvalue = parentOfItemslist.innerHTML;

  function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    var expires = "expires=" + d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
  }
  setCookie(cname, cvalue, exdays);


};

function readCookieAndSetLu(document) {
  console.log(cname);

  function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
      var c = ca[i];
      while (c.charAt(0) == ' ') {
        c = c.substring(1);
      }
      if (c.indexOf(name) == 0) {
        return c.substring(name.length, c.length);
      }
    }
    return "";
  }
  console.log(getCookie(cname));

  parentOfItemslist.innerHTML = getCookie(cname);

  newUl = document.getElementById('checklist');
  console.log(newUl);

  listItems = checkCurrentListItems();

  addEventListeners(listItems);


};
/* Prevent the text contents of draggable elements from being selectable. */

[draggable] {

  -moz-user-select: none;

  -khtml-user-select: none;

  -webkit-user-select: none;

  user-select: none;

  /* Required to make elements draggable in old WebKit */

  -khtml-user-drag: element;

  -webkit-user-drag: element;

}

.ghostLi {

  width: 20px;

  height: 20px;

  background-color: white !important;

}

.listItem {

  padding: 10px 10px 10px 10px;

  margin: 3px;

  background-color: red;

  color: white;

  width: 30px;

  border-top: thick solid white;

  border-top-width: 1px;

  -webkit-transition: all 0.2s ease-out;

  -moz-transition: all 0.2s ease-out;

  -ms-transition: all 0.2s ease-out;

  -o-transition: all 0.2s ease-out;

  transition: all 0.2s ease-out;

}

.dataTransferClass {

  background-color: brown;

}

.dragStartClass {

  opacity: 0;

  -webkit-transition: all 0.2s ease-out;

  -moz-transition: all 0.2s ease-out;

  -ms-transition: all 0.2s ease-out;

  -o-transition: all 0.2s ease-out;

  transition: all 0.2s ease-out;

}

.listItem.over {

  border-top: thick solid white;

  border-top-width: 50px;

  -webkit-transition: all 0.2s ease-out;

  -moz-transition: all 0.2s ease-out;

  -ms-transition: all 0.2s ease-out;

  -o-transition: all 0.2s ease-out;

  transition: all 0.2s ease-out;

}
<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" href="css/style.css" media="screen" title="no title" charset="utf-8">
  <meta charset="utf-8">
  <title></title>
</head>

<body>

  <ul id="checklist">
    <li class="listItem" draggable="true">1</li>
    <li class="listItem" draggable="true">2</li>
    <li class="listItem" draggable="true">3</li>
    <li class="listItem" draggable="true">4</li>
    <li class="listItem" draggable="true">5</li>
    <li class="listItem" draggable="true">6</li>
  </ul>


</body>
<script type="text/javascript" src="app/js/main.js"></script>
<script type="text/javascript" src="app/js/cookies.js"></script>

</html>