Конфликт скриптов
Как исправить конфликт двух скриптов?
jQuery(document).ready(function($) { var url=document.location.href; $.each($(".header-menu a"),function(){ if(this.href==url){$(this).addClass('menu-active');}; }); })(jQuery); Хочу продублировать этот скрипт, пишу вот так: jQuery(document).ready(function($) { var link=document.location.href; $.each($(".sushi a"),function(){ if(this.href==link){$(this).addClass('sushi-active');}; }); })(jQuery); Но он почему то не работает, где я допустил ошибку? |
$.each($(".header-menu a, .sushi a") ... Класс будет назначаться одинаковый, но это не проблема вовсе. |
Цитата:
$("a[href='" + document.location.href + "']").addClass('sushi-active'); Зачем выбирать, а затем в цикле перебирать. Может стоить сразу выбрать нужные |
Poznakomlus, это не тоже самое. Как правило, такой подход не будет работать.
|
Цитата:
Вообще выборки типа $('.cls')- считаются не оптимизированными. Так пишут те, кто не понимает как происходит поиск по коллекции DOM элементов. Правильнее задавать хотя-бы элемент среди которых производиться поиск. К примеру $('li.cls') Работа с ссылками здесь вообще, отдельная история. Не стоит забывать что массив всех ссылок есть уже в document.links |
Начнем с того что задача подсветки активных пунктов решается на уровне CMS. Даже зассанная джумла это умеет делать. Автор видимо либо юзает херню какую-то, а не CMS, либо не в курсе как сконфигурировать.
Цитата:
А в атрибут href как правило пишут относительный урл: <a href="/">Home</a> <a href="/about">About</a> А вот свойство href уже содержит нормализованный абсолютный урл, с которым можно сравнивать location.href. Хотя может jQuery это обыгрывает (надеюсь что нет - итак делает дохрена чего не просят). Цитата:
Цитата:
|
Poznakomlus, ты меня огорчаешь :-?
|
Цитата:
Если у него линк var url=document.location.href; и его так устраивает Цитата:
Про скорость здесь комментировать не буду. Цитата:
$('li.cls') и $('.cls') с каких делов ты li будешь менять? какие затраты будут на замену? насколько информативно $('li.cls') и $('.cls')? что будет если добавят класс в элементе котором не надо обрабатывать. Таких причин и условий может быть ... |
:write:
if(url.indexOf(this.href)!=-1){} |
Цитата:
Цитата:
Цитата:
Или я правильно понимаю, что нужно использовать только такие селекторы, которые "считаются оптимизированными", даже если они работают медленней и менее практичны? :D Твои доводы по li неубедительны и не подтверждаются в реальных проектах. Зайди на гитхаб и посмотри код популярных js-скриптов. |
Цитата:
|
Цитата:
|
danik.js,
так ? if(location.href.pathname == this.getAttribute('href')){} |
рони, что так? Какую задачу пытаешься решить объясни. И почему предлагаешь именно такие варианты, исходя из чего?
|
danik.js,
задача таже заменить сервер и cmc для выделения активной ссылки ... как это сделать наиболее правильно. |
Цитата:
|
danik.js,
то есть одного pathname недостаточно ??? и что такое чпу? |
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
<body> <style> .sushi-active { color:red; } </style> <a href="http://lookatcode.com/showhtml">Active link</a> <script type='text/javascript' src='http://code.jquery.com/jquery-1.9.1.js'></script> <script> jQuery(function ($) { console.log( document.location.href ); $("a[href='" + document.location.href + "']").addClass('sushi-active'); }); </script> </body> |
|
Poznakomlus,
а почему document.location.href а не window.location.href |
лучше так:
$('a[href*="//'+location.hostname+'"]').addClass('sushi-active'); |
рони,
так написал. И даже не скажу про разницу в данном вопросе между location объекта window и document Deff, согласен |
Нет смысла выделять ссылки на текущую страницу, если они не связаны с разными якорями(их вообще стоит скрыть), отличными от текущего
А при наличии якоря, приведённое выделение не будет работать на все остальные якоря, поэтому см Выше |
В подавляющем большинстве (уверен, и у ТС в том числе) ссылка будет такой:
<a href="/showhtml">Active link</a> |
danik.js,
Сейчас все стараются ставить полную ссылку, см статьи на Хабре, в частности в связи с разными уязвимостями Можно глянуть самые популрные сайты и поисковики, в принципе укорочение кода на один слеш мало повлияет на вероятность ложного срабатывания |
Цитата:
|
Кстати файрффокс походу атрибут подменяет абсолютной ссылкой. ие может также делает. хром нет.
Цитата:
![]() |
Часовой пояс GMT +3, время: 21:21. |