2014-11-09 50 views
4

我想將<li>從一個<ul>附加到另一個即時創建的<ul>。我想根據它們的data-group屬性將列表項分組到新的子列表中。根據數據屬性將列表項添加到子列表中

<ul id="sortable1"> 
    <li data-group="A">test</li> 
    <li data-group="A">test1</li> 
    <li data-group="B">test2</li> 
    <li data-group="B">test3</li> 
    <li data-group="C">test4</li> 
</ul> 

基本上我通過這個列表試圖環和虎視眈眈從每個組中的所有<li>,然後將其移動到另一個<ul>

這是我到目前爲止,但我沒有得到預期的結果。過去我在Excel中完成了這個工作,但是無法使用jQuery。

var listItems = $("#sortable1").children("li"); 
listItems.each(function (idx, li) { 
    var product = $(li); 
    //grab current li 
    var str = $(this).text(); 

    if (idx > 0) { 
     //append li 
     str += str; 
     if ($(this).data("group") != $(this).prev().data("group")) { 
      //I should be getting test and test1. 
      //but alert is only giving test1 test1. 

      alert(str); 
      //need to break into groups 
      //do something with groups 
     } 
    } 
}); 
+0

你只是想將內部的'li'元素複製到另一個'ul'中嗎?或者你想**移動他們? – 2014-11-09 03:29:16

+0

您是否想同時移動多個組,或每次只移動一個組?如果是後者,則首先使用[attribute equals selector](http://api.jquery.com/attribute-equals-selector/)選擇該組中的元素。 – CBroe 2014-11-09 03:30:20

+0

@DimitarDimitrov,理想情況下,我想移動它們。 – causita 2014-11-09 03:38:50

回答

1

怎麼是這樣的:

$(function() { 
 
    var sortable = $("#sortable1"), 
 
     content = $("#content"); 
 

 
    var groups = []; 
 
    sortable.find("li").each(function() { 
 
     var group = $(this).data("group"); 
 
     if($.inArray(group, groups) === -1) { 
 
      groups.push(group); 
 
     } 
 
    }); 
 
    
 
    groups.forEach(function(group) { 
 
     var liElements = sortable.find("li[data-group='" + group + "']"), 
 
      groupUl = $("<ul>").append(liElements); 
 
     content.append(groupUl); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="sortable1"> 
 
    <li data-group="A">test</li> 
 
    <li data-group="A">test1</li> 
 
    <li data-group="B">test2</li> 
 
    <li data-group="B">test3</li> 
 
    <li data-group="C">test4</li> 
 
</ul> 
 

 
<div id="content">  
 
</div>

我希望我沒有誤解你。

+1

如果這些組超過「A」,「B」,「C」,該怎麼辦?我認爲動態生成該陣列是個好主意。 – dashtinejad 2014-11-09 03:45:50

+0

我標記爲答案,因爲這將工作,但@ ROX是正確的,我正在尋找一個更動態的方式來做到這一點。謝謝! – causita 2014-11-09 03:55:23

+1

@causita我很高興能幫上忙。我做了一些編輯,動態地生成組數組。 – 2014-11-09 04:34:19