在jQuery中对相同类型的多个元素进行排序
Sort Multiple Elements of the same type in jQuery
基本上我有以下由PHP渲染的:
<div class="parent">
<div class="child" data-sort=2>2</div>
<div class="child" data-sort=1>1</div>
<div class="child" data-sort=3>3</div>
</div>
<div class="parent">
<div class="child" data-sort=1>1</div>
<div class="child" data-sort=3>3</div>
<div class="child" data-sort=2>2</div>
<div class="child" data-sort=2>2</div>
</div>
而我想要返回的是:
<div class="parent">
<div class="child" data-sort=1>1</div>
<div class="child" data-sort=2>2</div>
<div class="child" data-sort=3>3</div>
</div>
<div class="parent">
<div class="child" data-sort=1>1</div>
<div class="child" data-sort=2>2</div>
<div class="child" data-sort=2>2</div>
<div class="child" data-sort=3>3</div>
</div>
所以基本上它必须根据每个子元素的数据排序属性对父元素的多个实例进行排序,同时仍然在父元素中保持其状态。
您将如何使用 jQuery 来定位每个父元素,然后根据数据排序属性对该父元素中的每个子元素进行排序。
这是我最接近的一次,但它没有呈现任何东西:
<script>
jQuery(document).ready(function($) {
jQuery.each('.parent', function(index, val) {
jQuery(jQuery(this).children('.child')).sort(function(a,b){
return a.dataset.sort > b.dataset.sort;
}).appendTo(this);
});
});
</script>
提前感谢!
您尝试在 jQuery 对象上使用 sort
方法,但他们没有(记录的)方法。但是,数组有一个sort
,然后如果你附加排序的数组,子数组就会被移动:
jQuery(document).ready(function($) {
$('.parent').each(function() {
var p = $(this);
p.append(p.children(".child").get().sort(function(a, b) {
return $(a).attr("data-sort") - $(b).attr("data-sort");
}));
});
});
<div class="parent">
<div class="child" data-sort=2>2</div>
<div class="child" data-sort=1>1</div>
<div class="child" data-sort=3>3</div>
</div>
<div class="parent">
<div class="child" data-sort=1>1</div>
<div class="child" data-sort=3>3</div>
<div class="child" data-sort=2>2</div>
<div class="child" data-sort=2>2</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
工作原理:
-
我们循环遍历
.parent
元素 -
在这些中,我们得到孩子,并使用
.get()
得到他们的数组 -
然后我们对数组进行排序,使用回调,该回调利用了以下事实:当你在字符串上使用二进制
-
运算符时,它们会被转换为数字;所以$(a).attr("data-sort") - $(b).attr("data-sort")
最终是负的,a
的阶低于b
的,0
如果它们相同,或者如果b
的阶高于a
的序,则为正
。 。并再次将其附加到父级,这将移动元素
请注意,上述假设.parent
元素中没有非.child
子元素,或者您希望.child
子元素最终排在.parent
中的任何其他子项之后。
您可以使用 Array.sort 迭代每个父元素并对其子元素进行排序:
var parent = $('.parent');
parent.each(function(){
$(this).find('.child').sort(function (a, b) {
return +a.dataset.sort - +b.dataset.sort;
}).appendTo($(this));
});
工作演示
既然你在PHP中构建它,为什么不在那里构建排序数据本身。 像这样:
<?php
$arr[0] =array(2,1,3);
$arr[1] =array(1,3,2,2);
$data="";
foreach($arr as $key=>$val){
$data .="<div class='parent'>";
$x=$val;
sort($x);
foreach($x as $k=>$v){
$data .="<div class='child' data-sort=$v>$v</div>";
}
$data .="</div>";
}
var_dump($data);
?>
你可以这样使用
$('.parent').each(function(index, val) {
$this = $(this);
sorted = $this.children().sort(function(a,b) {
var vA = parseInt($(a).data("sort"));
var vB = parseInt($(b).data("sort"));
return (vA < vB) ? -1 : 1;
})
$(sorted).appendTo($this);
});
工作示例在这里
相关文章:
- 如何使用jquery对元素进行排序和定位
- 根据输入文本按元素排序,AngularJS
- 将元素排序到数组的顶部
- Scriptaculous排序表和句柄的问题(元素排序不正确)
- 如何使用jquery随机元素排序
- 是对集合中的所有元素排序,还是只对添加的元素排序
- 在case语句中对表元素排序时出现问题
- 类似于mason .js或同位素.js的打包布局,不按现有元素排序
- 如何根据子元素的值对父元素排序?
- 如何捕捉元素排序使用jQuery sortable
- Javascript:对数组的数组按每个内部数组中的第二个元素排序
- JS基于子元素对父元素排序
- 如何将Firebase子元素中的值与其他元素排序
- 工具提示在元素排序后停止工作
- 遍历元素以对其子元素排序
- 元素排序例程在Firefox中工作,但在Chrome中崩溃
- Javascript按数组中的元素排序
- JS:基于数据元素排序列表项
- 如何按三个元素排序
- JQ UI排序表:停止排序表内的一些元素排序