Сортировка блоков по параметрам
Здравствуйте форумчане.
Есть несколько блоков div у каждого свои параметры: цена, рейтинг, название и т.д Нужно осуществить сортировку этих блоков по возрастанию и убыванию соответственно. Задавать параметры блокам через id или class не получается т.к. их несколько. Буду рад любой помощи! |
webmanss,
почему класс то назначить нельзя? html код где? по форуму этих сортировок ... много. |
Через классы так?
<div id="sorting"> <a href="#" id="price">цена</a> <a href="#" id="name">название</a> <a href="#" id="rating">рейтинг</a> </div> <div id="conteiner"> <div class="price_100 name_a rating_5">Text 1</div> <div class="price_200 name_b rating_4">Text 2</div> <div class="price_300 name_c rating_3">Text 3</div> .... </div> |
webmanss,
Вариант сортировки по классам ... при условии одинаковой длины сортируемого класса для всех элементов, 100 - 200 но не 30 а 030
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<script src="https://code.jquery.com/jquery-latest.js" type="text/javascript">
</script>
<script type="text/javascript">
$(function () {
var a_sort = $('#sorting a');
var div_conteiner = jQuery.makeArray($('#conteiner div'));
a_sort.each(function (index, self) {
var id = $(self).attr("id");
var reg = new RegExp("^.*?(" + id + "\\S+).*?$");
$(self).click(function (e) {
e.preventDefault();
div_conteiner.sort(function f(a, b) {
a = a.className.replace(reg, '$1');
b = b.className.replace(reg, '$1');
var c = 0
if (a > b) c = 1;
if (a < b) c = -1;
return c
});
$.map(div_conteiner, function (div) {
$(div).appendTo($('#conteiner'))
});
});
});
});
</script>
</head>
<body>
<div id="sorting">
<a href="#" id="price">цена</a>
<a href="#" id="name">название</a>
<a href="#" id="rating">рейтинг</a>
</div>
<div id="conteiner">
<div class="price_200 name_b rating_4">Text 2 price_200 name_b rating_4</div>
<div class="price_100 name_c rating_5">Text 1 price_100 name_c rating_5</div>
<div class="price_300 name_a rating_3">Text 3 price_300 name_a rating_3</div>
</div>
</body>
</html>
|
А нафига пихать все в классы? Лучше и проще так:
<div data-price="200" data-name="b" data-rating="4"> |
Цитата:
|
Спасибо огромное рони!
Искал много, в основном все под таблицы заточено. Не сочтите за наглость), просто совсем ноль в скриптах. Как привязать картинки (со стрелками) к ссылкам, чтобы по клику сортировка по убыванию, по второму клику менялась картинка на возрастание? |
webmanss,
хоть ссылки то на картинки up dn сбросьте ))) |
Вложений: 1
Имеется в виду, что картинки будут задаваться через свойства бекграундом.
например: <a href="#" id="price">цена</a>
<style>
#price {
background:url(img/up.jpg) right;
color:#000;
border-bottom: dotted #000000 1px;
text-decoration:none;
}
</style>
Только вот как эти свойства менять динамически? не знаю |
webmanss,
Ну раз картинок ненашли то без картинок ... дальше сами.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<style>
a {
color:#000;
text-decoration:none;
cursor: default;
}
a span {
cursor: pointer;
}
</style>
<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript">
</script>
<script type="text/javascript">
$(function () {
var a_sort = $('#sorting span');
var div_conteiner = jQuery.makeArray($('#conteiner div'));
a_sort.each(function (index, self) {
var id = $(self).parent().attr("id");
$(self).click(function (e) {
e.preventDefault();
div_conteiner.sort(function f(a, b) {
a = $(a).data(id);
b = $(b).data(id);
var c = 0
if (a > b) c = 1;
if (a < b) c = -1;
return c
});
if (index%2) div_conteiner.reverse()
$.map(div_conteiner, function (div) {
$(div).appendTo($('#conteiner'))
});
});
});
});
</script>
</head>
<body>
<div id="sorting">
<a href="#" id="price">цена<span>▲</span><span>▼</span></a>
<a href="#" id="name">название<span>▲</span><span>▼</span></a>
<a href="#" id="rating">рейтинг<span>▲</span><span>▼</span></a>
</div>
<div id="conteiner">
<div data-price="200" data-name="b" data-rating="4">Text 2 price_200 name_b rating_4</div>
<div data-price="100" data-name="c" data-rating="5">Text 1 price_100 name_c rating_5</div>
<div data-price="300" data-name="a" data-rating="3">Text 3 price_300 name_a rating_3</div>
</div>
</body>
</html>
|
| Часовой пояс GMT +3, время: 23:20. |