[英]Sort <div> elements using jQuery
I have HTML like the following on my website: 我的网站上有以下HTML代码:
<div class="groups">
<div class="group">
Group 1 priority:
<select>
<option value="1.0">1</option>
<option value="2.0" selected="selected">2</option>
<option value="3.0">3</option>
</select>
</div>
<div class="group">
Group 2 priority:
<select>
<option value="1.0">1</option>
<option value="2.0">2</option>
<option value="3.0" selected="selected">3</option>
</select>
</div>
<div class="group">
Group 3 priority:
<select>
<option value="1.0" selected="selected">1</option>
<option value="2.0">2</option>
<option value="3.0">3</option>
</select>
</div>
</div>
I am looking for a way to sort the order these groups appear in the browser using jQuery, based on the what is selected in the dropdown. 我正在寻找一种方法来根据下拉列表中选择的内容,使用jQuery对这些组在浏览器中显示的顺序进行排序。 It should resort when the user selects a new value in any of the dropdowns, or on page load. 当用户在任何下拉列表中或页面加载中选择新值时,它应该求助。
What would be the easiest approach to this problem? 这个问题最简单的方法是什么?
I have jQuery UI available, if the sortable thing can be used in any way. 我可以使用jQuery UI,如果可以以任何方式使用可排序的东西。 I couldn't not find a way to use that. 我无法找到使用它的方法。
Update : There is other data in the <div class="group"> that should follow the dropdowns wherever they are moved. 更新 :<div class =“group”>中还有其他数据,无论它们在何处移动,都应遵循下拉列表。 The number of groups varies from 0 to 20. 组的数量从0到20不等。
Edit: Here is some code which should do what you're after. 编辑:这里有一些代码可以做你想要的。 Here select_1
, select_2
, etc should be the IDs of the dropdowns. 这里select_1
, select_2
等应该是下拉列表的ID。 getDropdown()
should be a function that returns the selected value of the given dropdown ID using your choice of method ( document.getElementById().options.selectedIndex,
, jquery, etc) getDropdown()
应该是一个函数,它使用您选择的方法( document.getElementById().options.selectedIndex,
,,jquery等)返回给定下拉ID的选定值document.getElementById().options.selectedIndex,
<div id="parent">
<div id="child1">
..content
<select id="select_1">...content</select>
</div>
<div id="child2">
..content
<select id="select_2">...content</select>
</div>
<div id="child3">
..content
<select id="select_3">...content</select>
</div>
</div>
function sortValues()
{
/*Save the contents of each div in an array
so they can be looped through and
re inserted later*/
var content=[$("#child1").html(),$("#child2").html,$("#child3").html()];
//Get the value of all dropdowns and sort them
var sortedArray=[getDropdown("select_3"),getDropdown("select_2"),getDropdown("select_3")];
var sortedContent=new Array();
sortedArray.sort();
/*Loop through all the sorted values,
compare the value of each dropdown
against the sorted value and use that
to determine the new arrangement of the divs
*/
for (x=0; x< sortedArray.length; x++)
{
for (y=0; y<=content.length; y++)
{
if (getDropdown("dropdown_" + (y+1))==sortedArray[x])
{
sortedContent[x]=content[x];
//This will prevent the same div from being assigned again:
$("#select_" + (y+1)).remove();
break;
}
}
}
/* Empty the parent div so new divs can be inserted.
You can also do a fadeout/fadeIn of the div here
*/
$("#parent").empty();
for (x=0; x< sortedContent.length; x++)
{
$("#parent").append(sortedContent[x]);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.