Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Меню без классических ссылок (https://javascript.ru/forum/dom-window/43712-menyu-bez-klassicheskikh-ssylok.html)

irkprin 17.12.2013 13:35

Меню без классических ссылок
 
Есть огромное древовидное (jquery.treeview) меню,
SEO задача переделать в нем классические ссылки, на ссылки вида:
<span onclick="location.href='http://domen.ru/link';" title="Производитель имя">Имя производителя</span>


Чтобы не иметь на странице тысячи внутряков.

Обработчик классической ссылки:
var current = this.find("a").filter(function() {
   return this.href.toLowerCase() == location.href.toLowerCase();
});


Соответственно вместо "a", пишем "span".

А вот что написать вместо href ума не приложу???

title трогать нельзя, не красиво будет да и не по SEO-шному.

Vlasenko Fedor 17.12.2013 14:09

<head>
    <style>
      [data-href]:hover {
        cursor: pointer;
        text-decoration: underline;
      }
    </style>
    <script type='text/javascript' src='http://code.jquery.com/jquery-1.9.1.js'></script>
  </head>
  <body>
    <div id="menu">
      <span data-href="http://mail.ru" title="Производитель имя">Имя производителя</span>
    </div>
    <script>
      $('#menu').on('click', '[data-href]', function () {
        window.location = $(this).data('href');
      });
    </script>
  </body>

irkprin 17.12.2013 14:24

к сожалению сайт не может корректно работать на jquery-1.9.1, только на jquery-1.7.2, а там не работает data-href

irkprin 17.12.2013 14:32

Перефразирую свой вопрос. Как из ссылки вида:

<span onclick="location.href='http://domen.ru/link';" title="Производитель имя">Имя производителя</span>


Средствами JavaScript вытащить это
http://domen.ru/link
?

irkprin 17.12.2013 14:39

действительно работает, только мне такое решение видимо не подходит. Так как за ним потянется переписывание всего jquery.treeview а там 250 строк.

irkprin 17.12.2013 16:28

Не работает. Наверно из-за id="menu". У меня один id на кучу ссылок.

Vlasenko Fedor 17.12.2013 16:59

Что не работает? Я обернул ссылки в блок id="menu" только для того, чтобы повесить один обработчик на все ссылки, а не множество. И все прекрасно работает. Если ты заменишь на
$('span[onclick]').on('click', function () {
то так ты вешаешь на каждую ссылку обработчик
<head>
    <style>
      span[onclick]:hover {
        cursor: pointer;
        text-decoration: underline;
      }
    </style>
    <script type='text/javascript' src='http://code.jquery.com/jquery-1.7.2.js'></script>
  </head>
  
  <body>
    <div id="menu">
      <span onclick="location.href='http://domen.ru/link';" title="Производитель имя">Меню 1</span>
      <span onclick="location.href='http://mail.ru/';" title="Производитель имя">Меню 2</span>
      <span onclick="location.href='http://lenta.ru/';" title="Производитель имя">Меню 3</span>
    </div>
    <script>
      $('#menu').on('click', 'span[onclick]', function () {
        var data = $(this).attr('onclick').split("'");
        alert(data[1]);
      });
    </script>
  </body>

irkprin 17.12.2013 17:18

проблема в том, что меню jquery.treeview

http://jquery.bassistance.de/treevie...erendered.html


имеет кучу своих заморочек и как только я делаю шаг влево или вправо, то меню перестает работать.

вот кусок кода, который сравнивает ссылки для подсветки активного пункта меню:

var current = this.find("a").filter(function() {
   return this.href.toLowerCase() == location.href.toLowerCase();
});


и я не могу его никак заменить Вашим кодом, ни полностью ни частично, меню перестает работать ветка схлапывается и не раскрывается.

У меня меню в глубину до 3-го уровня, 1-ый и 3-ий уровни я победил, а вот 2-ой никак((

Vlasenko Fedor 17.12.2013 17:45

А с самого начала толком объяснить
var current = $('span[onclick]').filter(function () {
      return $(this).attr('onclick').split("'")[1].toLowerCase() == location.href.toLowerCase();    
});


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