2012-02-28 1 views
1

제거 만들기 중복 목록이 제거 된 목록 :구문 분석 div를 이런 식으로 컬럼 식별자가있는 항목으로 된 div 내가 DOM에있는</p> <p>... UL/LI 목록 일부 jQuery를 조언이 필요 중복

<ul id="new-list"> 
<li>cocker spaniel</li> 
<li>collie</li> 
<li>german shepherd</li> 
<li>poodle</li> 
<li>pug</li> 
</ul> 

이를 달성하기위한 가장 빠른 jQuery 방법을 찾으려고합니다. 페이지가로드 될 때 변환 할 페이지에 약 500 개의 div가 있습니다.

+0

은 늘 2000이 있더라도 많은 시간을 divs – coolguy

답변

1
var $myData = $('.my-data').detach(), list = [], listHtml = ['<ul><li>']; 

$myData.each(function(i, el) { 
    var txt = $(el).text().split(';'); 
    $.each(txt, function(idx, val) { 
     var val = $.trim(val); 
     if (val && val != '' && $.inArray(val, list) == -1) { 
     list.push(val); 
     } 
    }); 
}); 

list.sort(); 
listHtml.push(list.join('</li><li>')); 
listHtml.push('</li></ul>'); 

$('body').append(listHtml.join('')); 

는 DEMO : 여기

+0

와우, 올바른 결과를 얻기위한 최소한의 코드입니다. Pefect! 이것은 http://jsfiddle.net/jbeacher/9qfpn/8/에서 내 자신의 성가신 솔루션보다 훨씬 낫다. – ATLWebDesigner

0
<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
var sorting = []; 

var divs = $('.my-data'); 
    $.each(divs,function(){ 
    var instr = $(this).html().split(';'); 
    for(i=0;i<instr.length;i++){ 
    if(instr[i] !=""){ 
     sorting.push(instr[i]); 
     } 
     }; 

    }); 

    sorting.sort(); 

    var str = '<ul id="new-list">'; 
    for(i=0;i<sorting.length;i++){ 
    if((sorting[i] != sorting[i+1]) && sorting[i+1] !="undefined"){ 
     str += '<li>'+sorting[i]+'</li>'; 
     } 
    }; 
    str += '</ul>'; 
$('#container').html(str); 
}); 
</script> 

</head> 
<body> 

    <div class="my-data">collie; german shepherd;</div> 
<div class="my-data">collie; cocker spaniel; pug; poodle;</div> 
<div class="my-data">poodle; german shepherd;</div> 
<div id="container" ></div> 


</body> 

</html> 
+0

여러 가지 방법이 있습니다 ... 그냥 와트를 정렬 내 마음에 먼저 온다. – coolguy

0

http://jsfiddle.net/BWBsj/는 자바 스크립트입니다

var dataArray = []; 

$("body").append("<ul id='new-list'></ul>"); 

var newList = $("#new-list"); 

$(".my-data").each(function(){ 
var tempArray = $(this).text().split(";"); 

for(var temp in tempArray){ 

    var item = tempArray[temp]; 

    if(item !='' && $.inArray(item, dataArray) == -1) { 
     dataArray.push(item); 
     newList.append("<li>"+item +"</li>"); 
    } 

} 

}); 

DEMO : 그것은 순수한 자바 스크립트이기 때문에 http://jsfiddle.net/yycYb/21/

+1

OP별로 고유하지 않거나 정렬되지 않았습니다. – charlietfl

+0

이것은 좋은 접근 방법이지만 데이터를 사전 순으로 정렬하는 2 차적인 목표를 달성하지 못했습니다. – ATLWebDesigner