내 데이터 속성에 대한 jQuery에서 4 가지 방법 정렬을 만들었습니다. 그러나 정렬 옵션을 클릭하면 항상 한 번 AZ에서 알파벳순으로 정렬됩니다. 정렬에서 다른 시간을 클릭하면 아무 작업도 수행되지 않습니다.
클릭 한 항목을 확인하기 위해 콘솔 로그를 수행하면 다음과 같은 결과가 나타납니다.
za
az
또는
1-10
za
az
따라서 항상 AZ에서 정렬됩니다. 그러나 솔직히 이유를 모릅니다.
다음은 내 HTML의 예입니다.
<div class="sort">
<span class="sort__item" id="js-az">A-Z</span>
<span class="sort__item" id="js-za">Z-A</span>
<span class="sort__item" id="js-1-10">1-10</span>
<span class="sort__item" id="js-10-1">10-1</span>
</div>
<div class="row js-songs-sortable" id="all-song-list">
<div class="col-md-4 col-sm-12" data-count="5" data-name="Strange Days">
content
</div>
<div class="col-md-4 col-sm-12" data-count="1" data-name="Rock Bottom">
content
</div>
<div class="col-md-4 col-sm-12" data-count="1" data-name="Moutain">
content
</div>
<div class="col-md-4 col-sm-12" data-count="3" data-name="Mad Sun">
content
</div>
<div class="col-md-4 col-sm-12" data-count="10" data-name="Another Ugly Tune">
content
</div>
</div>
그리고 이것은 내 jQuery 코드입니다.
jQuery('body').on('click', '.sort #js-az', function(){
jQuery(".js-songs-sortable > div").sort(sort_li).appendTo('.js-songs-sortable');
function sort_li(a,b){
return (jQuery(b).data('name')) < (jQuery(a).data('name')) ? 1 : -1;
}
});
jQuery('body').on('click', '.sort #js-za', function(){
jQuery(".js-songs-sortable > div").sort(sort_li).appendTo('.js-songs-sortable');
function sort_li(b,a){
return (jQuery(b).data('name')) < (jQuery(a).data('name')) ? 1 : -1;
}
});
jQuery('body').on('click', '.sort #js-1-10', function(){
jQuery(".js-songs-sortable > div").sort(sort_li).appendTo('.js-songs-sortable');
function sort_li(a,b){
return (jQuery(b).data('count')) < (jQuery(a).data('count')) ? 1 : -1;
}
});
jQuery('body').on('click', '.sort #js-10-1', function(){
jQuery(".js-songs-sortable > div").sort(sort_li).appendTo('.js-songs-sortable');
function sort_li(b,a){
return (jQuery(b).data('count')) < (jQuery(a).data('count')) ? 1 : -1;
}
});
실시간 미리보기는 https://mpdb.space/mp-songs/ 에서 찾을 수 있습니다.
코드의 문제는 사용하고 .data
있지만 .attr()
.
jQuery('body').on('click', '.sort #js-az', function() {
jQuery(".js-songs-sortable > div").sort(sort_li).appendTo('.js-songs-sortable');
function sort_li(a, b) {
return (jQuery(b).attr('data-name')) < (jQuery(a).attr('data-name')) ? 1 : -1;
}
});
jQuery('body').on('click', '.sort #js-za', function() {
jQuery(".js-songs-sortable > div").sort(sort_li).appendTo('.js-songs-sortable');
function sort_li(b, a) {
return (jQuery(b).attr('data-name')) < (jQuery(a).attr('data-name')) ? 1 : -1;
}
});
jQuery('body').on('click', '.sort #js-1-10', function() {
jQuery(".js-songs-sortable > div").sort(sort_li).appendTo('.js-songs-sortable');
function sort_li(a, b) {
return (parseInt(jQuery(b).attr('data-count'))) < parseInt((jQuery(a).attr('data-count'))) ? 1 : -1;
}
});
jQuery('body').on('click', '.sort #js-10-1', function() {
jQuery(".js-songs-sortable > div").sort(sort_li).appendTo('.js-songs-sortable');
function sort_li(b, a) {
return parseInt(jQuery(b).attr('data-count')) < parseInt(jQuery(a).attr('data-count')) ? 1 : -1;
}
});
.sort {
border-radius: 5px;
background-color: #eee;
display: inline-block;
margin-bottom: 1rem;
}
.sort span {
padding: 1rem;
cursor: pointer;
transition: all 0.3s;
display: inline-block;
}
.sort span:hover {
background-color: rgba(0, 0, 0, 0.1);
}
.row>div {
padding: 0.5rem;
}
.row>div::after {
content: "data-count= " attr(data-count) " data-name= " attr(data-name);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="sort">
<span class="sort__item" id="js-az">A-Z</span>
<span class="sort__item" id="js-za">Z-A</span>
<span class="sort__item" id="js-1-10">1-10</span>
<span class="sort__item" id="js-10-1">10-1</span>
</div>
<div class="row js-songs-sortable" id="all-song-list">
<div class="col-md-4 col-sm-12" data-count="5" data-name="Strange Days">
</div>
<div class="col-md-4 col-sm-12" data-count="1" data-name="Rock Bottom">
</div>
<div class="col-md-4 col-sm-12" data-count="1" data-name="Moutain">
</div>
<div class="col-md-4 col-sm-12" data-count="3" data-name="Mad Sun">
</div>
<div class="col-md-4 col-sm-12" data-count="10" data-name="Another Ugly Tune">
</div>
</div>
또한 유지 관리 및 가독성을 위해 코드를 약간 변경할 수 있습니다. 이 예를 참조하십시오.
jQuery('body').on('click', '.sort__item', function() {
const id = jQuery(this).attr("id");
jQuery(".js-songs-sortable > div").sort(function(a, b) {
let firstEl = jQuery(a);
let secondEl = jQuery(b);
let $return = 0;
switch (id) {
case "js-az":
$return = (firstEl.attr('data-name') > secondEl.attr('data-name')) ? 1 : -1;
break;
case "js-za":
$return = (firstEl.attr('data-name') < secondEl.attr('data-name')) ? 1 : -1;
break;
case "js-1-10":
$return = (parseInt(firstEl.attr('data-count')) > parseInt(secondEl.attr('data-count'))) ? 1 : -1;
break;
case "js-10-1":
$return = (parseInt(firstEl.attr('data-count')) < parseInt(secondEl.attr('data-count'))) ? 1 : -1;
break;
}
return $return;
}).appendTo('.js-songs-sortable');
});
.sort {
border-radius: 5px;
background-color: #eee;
display: inline-block;
margin-bottom: 1rem;
}
.sort span {
padding: 1rem;
cursor: pointer;
transition: all 0.3s;
display: inline-block;
}
.sort span:hover {
background-color: rgba(0, 0, 0, 0.1);
}
.row>div {
padding: 0.5rem;
}
.row>div::after {
content: "data-count= " attr(data-count) " data-name= " attr(data-name);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="sort">
<span class="sort__item" id="js-az">A-Z</span>
<span class="sort__item" id="js-za">Z-A</span>
<span class="sort__item" id="js-1-10">1-10</span>
<span class="sort__item" id="js-10-1">10-1</span>
</div>
<div class="row js-songs-sortable" id="all-song-list">
<div class="col-md-4 col-sm-12" data-count="5" data-name="Strange Days">
</div>
<div class="col-md-4 col-sm-12" data-count="1" data-name="Rock Bottom">
</div>
<div class="col-md-4 col-sm-12" data-count="1" data-name="Moutain">
</div>
<div class="col-md-4 col-sm-12" data-count="3" data-name="Mad Sun">
</div>
<div class="col-md-4 col-sm-12" data-count="10" data-name="Another Ugly Tune">
</div>
</div>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다