Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Изменение порядка пунктов в меню (https://javascript.ru/forum/jquery/17932-izmenenie-poryadka-punktov-v-menyu.html)

vyrtime 09.06.2011 13:29

Изменение порядка пунктов в меню
 
Привет, может кто-нибудь подсказать как сделать на jquery такой механизм?
Имеем меню с несколькими пунктами:
-Главная
-Раздел 1
-Раздел 2
и т.д.
При клике, например, на "Раздел 1", он перемещается вверх в списке меню, т.е. изменяется порядок меню:
-Раздел 1
-Главная
-Раздел 2
В jquery не шарю, помогите!

ksa 09.06.2011 13:54

vyrtime, ты хоть бы тестовый пример своего "меню" сделал...

Serg_pnz 09.06.2011 14:13

искать надо в сторону сортировки таблиц

vyrtime 09.06.2011 14:19

Вот такое меню:
<ul>
  <li>
    <ul>
      <li>Раздел 1</li>
      <li>Раздел 2</li>
      <li>Раздел 3</li>
    </ul>
  </li>
  <li>
    <ul>
	  <li>Раздел 4</li>
	  <li>Раздел 5</li>
	  <li>Раздел 6</li>
	</ul>
  </li>
</ul>

Необходимо чтобы механизм работал только для конечных пунктов меню

ksa 09.06.2011 14:25

Цитата:

Сообщение от vyrtime
Вот такое меню

А для чего тогда там список на первом уровне?

vyrtime 09.06.2011 14:30

для объяснения механизма который мне нужен
а прикрутить к многоуровнему меню сам попробую

ksa 09.06.2011 15:03

vyrtime, так не понятно чего тебе сортировать. :) Первый уровень или второй внутри себя... Или второй уровень "сквозняком" через все элементы первого уровня...

Покажи какой хтмл хочешь получить из первого примера если куда-то клацнуть...

vyrtime 09.06.2011 15:20

Ок, щас попробую объяснить :write:
Меню выглядит так:
<ul>
  <li>
    <ul>
      <li>Раздел 1</li>
      <li>Раздел 2</li>
      <li>Раздел 3</li>
    </ul>
  </li>
  <li>
    <ul>
      <li>Раздел 4</li>
      <li>Раздел 5</li>
      <li>Раздел 6</li>
    </ul>
  </li>
</ul>

щелкнув, например, по пункту "Раздел 3" - он просто переместится наверх (поменяет позицию) и меню уже будет выглядеть вот так:
<ul>
  <li>
    <ul>
      <li>Раздел 3</li>
      <li>Раздел 1</li>
      <li>Раздел 2</li>
    </ul>
  </li>
  <li>
    <ul>
      <li>Раздел 4</li>
      <li>Раздел 5</li>
      <li>Раздел 6</li>
    </ul>
  </li>
</ul>

Теперь, например мы щелкнем по "Раздел 2", он также возьмет и переместиться на самую верхнюю позицию и меню будет выглядеть так:
<ul>
  <li>
    <ul>
      <li>Раздел 2</li>
      <li>Раздел 3</li>
      <li>Раздел 1</li>
    </ul>
  </li>
  <li>
    <ul>
      <li>Раздел 4</li>
      <li>Раздел 5</li>
      <li>Раздел 6</li>
    </ul>
  </li>
</ul>

Теперь щелкнув по "Раздел 3" он переместится опять же вверх и меню будет выглядеть так:
<ul>
  <li>
    <ul>
      <li>Раздел 3</li>
      <li>Раздел 2</li>
      <li>Раздел 1</li>
    </ul>
  </li>
  <li>
    <ul>
      <li>Раздел 4</li>
      <li>Раздел 5</li>
      <li>Раздел 6</li>
    </ul>
  </li>
</ul>

И т.д.
Т.е. при клике не на первый в позиции меню пункт, а на другие пункты, они(пункты) будут перемещаться на первую позицию, а первый пункт в позиции будет просто съезжать/перемещаться вниз вместе с остальными пунктами.
Тот же механизм должен работать у разделов 4,5,6.
Надеюсь более менее объяснил:)

ksa 09.06.2011 15:24

Т.е. движение только внутри подраздела, так?

vyrtime 09.06.2011 15:27

да

ksa 09.06.2011 15:37

Ну как вариант...

<!DOCTYPE html>
<html>
<head>
<title>test</title>
<style type="text/css">
</style>
<script type="text/javascript">
function Go(Obj) {
	var o=Obj.parentNode
	var oe=o.childNodes
	var i
	for (i=0; i<oe.length; i++) {
		if (oe[i]==Obj) break
		o.appendChild(oe[i])
	}
}
</script>
</head>
<body>
<ul>
	<li onclick='Go(this)'>Раздел 1</li>
	<li onclick='Go(this)'>Раздел 2</li>
	<li onclick='Go(this)'>Раздел 3</li>
</ul>
</body>
</html>

рони 09.06.2011 16:15

Вариант )))
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<style type="text/css">
</style>
<script type="text/javascript">
function Go(Obj) {
	var o=Obj.parentNode
	var oe=o.childNodes
    if (Obj!=oe[0]) o.insertBefore(Obj,oe[0])
    }
</script>
</head>
<body>
<ul id="ff">
	<li onclick='Go(this)'>Раздел 1</li>
	<li onclick='Go(this)'>Раздел 2</li>
	<li onclick='Go(this)'>Раздел 3</li>
</ul>
</body>
</html>

ksa 09.06.2011 20:52

рони, так лучше.

nikita.mmf 10.06.2011 00:11

$("#menu").delegate("li", "click", fuction(){
  if ( $(e.currentTarget).prev() ) {
    $(e.currentTarget.parentNode).prepend($(e.currentTarget).remove());
  }
})


'menu' - id верхнего уровня меню

vyrtime 10.06.2011 06:35

Спасибо всем большое!:)

Serg_pnz 10.06.2011 19:45

офтопом: а анимация где? я так думал всё красиво будет, пункт так смещается на верхний слой и плывет и проч....

vyrtime 17.06.2011 10:54

почему офтопом?:)
я специально выбрал форум jQuery, чтобы мне подсказали как на нем сделать, а мне на javascript'e написали:) но и на этом спасибо!

Serg_pnz 17.06.2011 13:41

Ну потому офтопом, что не в тему)) А анимация подразумевалась такая http://mootools.net/demos/?demo=Fx.Sort

vyrtime 17.06.2011 13:57

неплохая анимация, как бы её ещё и прикрутить...


Часовой пояс GMT +3, время: 12:37.