从列表中填充数组onclick javascript

时间:2014-06-03 14:59:47

标签: javascript jquery html ajax arrays

我正在用JS编写代码,我不知道如何在单击按钮时填充数组。我们有这个代码,它使用一个列表(ul),其中项目(li)可以用鼠标移动。如何使用2个数据填充数组,第一个位置和最后一个位置?

    <!doctype html>
    <html lang="en">
    <head>
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>    
    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>   
    <script src="https://raw.github.com/furf/jquery-ui-touch-punch/master/jquery.ui.touch-punch.min.js"></script> 
    <script>
      $(function() {
        $( ".documents" ).sortable();
        $( ".documents" ).disableSelection();
      });
    </script>
  <meta charset="utf-8">
  <title>toArray demo</title>
  <style>
  span {
    color: red;
  }
  </style>
</head>
<body>

Reversed - <span></span>

<ul id="opciones" class="documents">
<li>uno</li>
<li>dos</li>
<li>tres</li>
</ul>

<script>
function disp( li ) {
  var a = [];
  for ( var i = 0; i < li.length; i++ ) {
    a.push( li[ i ].innerHTML );
  }
  $( "span" ).text( a.join( " " ) );
}
disp( $( "li" ).toArray() );
</script>
 <input type="button" value="actualizar_array" onclick="disp('#opciones')" />
</body>
</html>

2 个答案:

答案 0 :(得分:0)

在函数disp()中,您将参数(li)视为数组,但是您将其作为字符串发送:disp('#opciones')。我想你想试试这个:

function disp( ul ) {
    var a = [];
    var mainUL = document.getElementByID( ul );
    var li = mainUl.childNodes;
    for ( var i = 0; i < li.length; i++ ) {
        a.push( li[ i ].innerHTML );
    }
    $( "span" ).text( a.join( " " ) );
}

使用disp("opciones")而不是disp('#opciones')来调用它。

答案 1 :(得分:0)

您可以使用这样的功能。您正在寻找的是.each方法。

   function updateOrder(){
        var a= [];

        $("#opciones li").each(function(i, li){
            a.push($(li).text());
        });

        // a now has the values of your list items in order
        // so you can do:
        $( "#display" ).text( a.join( " " ) );

    }

使用可排序插件,您可以从'sortupdate'事件中调用updateOrder:

$('#opciones').sortable().bind('sortupdate', function() {
    updateOrder();
});

我为你演示了一点小提琴。 http://jsfiddle.net/56Sr2/5/