Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Конфликт скриптов (https://javascript.ru/forum/jquery/52260-konflikt-skriptov.html)

Unnamed75 10.12.2014 16:01

Конфликт скриптов
 
Как исправить конфликт двух скриптов?
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);

Но он почему то не работает, где я допустил ошибку?

danik.js 10.12.2014 16:21

$.each($(".header-menu a, .sushi a") ...


Класс будет назначаться одинаковый, но это не проблема вовсе.

Vlasenko Fedor 10.12.2014 19:44

Цитата:

Сообщение от danik.js
$.each($(".header-menu a, .sushi a") ...

$("a[href='" + document.location.href + "']").addClass('sushi-active');

Зачем выбирать, а затем в цикле перебирать.
Может стоить сразу выбрать нужные

danik.js 11.12.2014 06:39

Poznakomlus, это не тоже самое. Как правило, такой подход не будет работать.

Vlasenko Fedor 11.12.2014 11:54

Цитата:

Сообщение от danik.js
Как правило

Какое правило? Поясни
Вообще выборки типа
$('.cls')
- считаются не оптимизированными. Так пишут те, кто не понимает как происходит поиск по коллекции DOM элементов. Правильнее задавать хотя-бы элемент среди которых производиться поиск. К примеру
$('li.cls')

Работа с ссылками здесь вообще, отдельная история. Не стоит забывать что массив всех ссылок есть уже в
document.links

danik.js 11.12.2014 12:24

Начнем с того что задача подсветки активных пунктов решается на уровне CMS. Даже зассанная джумла это умеет делать. Автор видимо либо юзает херню какую-то, а не CMS, либо не в курсе как сконфигурировать.
Цитата:

Сообщение от Poznakomlus
Какое правило? Поясни

Все просто. location.href - абсолютный урл, включающий схему.
А в атрибут href как правило пишут относительный урл:

<a href="/">Home</a>
<a href="/about">About</a>


А вот свойство href уже содержит нормализованный абсолютный урл, с которым можно сравнивать location.href.
Хотя может jQuery это обыгрывает (надеюсь что нет - итак делает дохрена чего не просят).
Цитата:

Сообщение от Poznakomlus
считаются не оптимизированными

Кем? Тобой? Ссылку плиз. Погонял в хроме - вариант без тега работает в два раза быстрей. В любом случае на разницу можно только дрочить. Тут другое:
Цитата:

Сообщение от Poznakomlus
Так пишут те, кто не понимает как происходит поиск по коллекции DOM элементов

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

danik.js 11.12.2014 12:25

Poznakomlus, ты меня огорчаешь :-?

Vlasenko Fedor 11.12.2014 13:02

Цитата:

Сообщение от danik.js
Все просто. location.href - абсолютный урл, включающий схему.
А в атрибут href как правило пишут относительный урл:

Какое это отношение имеет к вопросу Т. С.
Если у него линк var url=document.location.href; и его так устраивает
Цитата:

Сообщение от danik.js
Кем? Тобой?

тут и смотреть не надо, видно количество проведенных итераций при разных подходах
Про скорость здесь комментировать не буду.
Цитата:

Сообщение от danik.js
привязываться к тегам - плохо

Не видишь здесь паранои в области привязки
$('li.cls')

и
$('.cls')

с каких делов ты li будешь менять? какие затраты будут на замену? насколько информативно $('li.cls') и $('.cls')?
что будет если добавят класс в элементе котором не надо обрабатывать. Таких причин и условий может быть ...

рони 11.12.2014 13:10

:write:
if(url.indexOf(this.href)!=-1){}

danik.js 11.12.2014 13:16

Цитата:

Сообщение от Poznakomlus
Какое это отношение имеет к вопросу Т. С.

Наверное такое что твой код попросту не будет работать? И он вообще почти ни на одном сайте не будет работать. Или ты не считаешь это проблемой? :dance:
Цитата:

Сообщение от Poznakomlus
тут и смотреть не надо, видно количество проведенных итераций при разных подходах

Где видно? Куда смотреть? Как при большем числе итераций код отрабатывает быстрей?
Цитата:

Сообщение от Poznakomlus
Про скорость здесь комментировать не буду.

Какой ты загадочный. Ну раз начал гнуть свою линию, давай продолжай.

Или я правильно понимаю, что нужно использовать только такие селекторы, которые "считаются оптимизированными", даже если они работают медленней и менее практичны? :D

Твои доводы по li неубедительны и не подтверждаются в реальных проектах. Зайди на гитхаб и посмотри код популярных js-скриптов.

danik.js 11.12.2014 13:24

Цитата:

Сообщение от рони
if(url.indexOf(this.href)!=-1){}

Это типа чтобы серчпарамс и хэш игнорить? А если у него без чпу?

рони 11.12.2014 13:29

Цитата:

Сообщение от danik.js
Это типа чтобы серчпарамс и хэш игнорить? А если у него без чпу?

Пожалуйста изложи по проще, чтоб я понял :thanks: :)

рони 11.12.2014 13:33

danik.js,
так ?
if(location.href.pathname == this.getAttribute('href')){}

danik.js 11.12.2014 13:50

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

рони 11.12.2014 14:12

danik.js,
задача таже заменить сервер и cmc для выделения активной ссылки ... как это сделать наиболее правильно.

danik.js 11.12.2014 14:53

Цитата:

Сообщение от рони
как это сделать наиболее правильно

Не сделать этого никак. Только сервер знает с какой ссылкой связана текущая страница. На клиенте же в зависимости от чпу нужно обрезать query стринг (серч парамс) и в обязательном порядке - хэш.

рони 11.12.2014 15:05

danik.js,
то есть одного pathname недостаточно ??? и что такое чпу?

danik.js 11.12.2014 15:07

Цитата:

Сообщение от рони
то есть одного pathname недостаточно ???

А домен? А если чпу не используется? Сравнивать pathname со значением атрибута href тоже неверно.

рони 11.12.2014 15:12

Цитата:

Сообщение от рони
и что такое чпу?

https://ru.wikipedia.org/wiki/%D7%CF...5%F0%ED%E5%F2)
Цитата:

QUERY_STRING

Строка запроса веб-страницы, если она существует, через которую был получен доступ к странице.
Цитата:

Сообщение от danik.js
серч парамс

search params

Vlasenko Fedor 11.12.2014 15:26

Цитата:

Сообщение от danik.js
Наверное такое что твой код попросту не будет работать? И он вообще почти ни на одном сайте не будет работать. Или ты не считаешь это проблемой?

<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>

рони 11.12.2014 15:48

http://javascript.ru/forum/misc/3852...tml#post254605

рони 11.12.2014 15:50

Poznakomlus,
а почему document.location.href а не window.location.href

Deff 11.12.2014 15:55

лучше так:
$('a[href*="//'+location.hostname+'"]').addClass('sushi-active');

Vlasenko Fedor 11.12.2014 16:03

рони,
так написал. И даже не скажу про разницу в данном вопросе между location объекта window и document
Deff,
согласен

Deff 11.12.2014 16:07

Нет смысла выделять ссылки на текущую страницу, если они не связаны с разными якорями(их вообще стоит скрыть), отличными от текущего
А при наличии якоря, приведённое выделение не будет работать на все остальные якоря, поэтому см Выше

danik.js 11.12.2014 16:08

В подавляющем большинстве (уверен, и у ТС в том числе) ссылка будет такой:
<a href="/showhtml">Active link</a>

Deff 11.12.2014 16:11

danik.js,
Сейчас все стараются ставить полную ссылку, см статьи на Хабре, в частности в связи с разными уязвимостями
Можно глянуть самые популрные сайты и поисковики, в принципе укорочение кода на один слеш мало повлияет на вероятность ложного срабатывания

danik.js 11.12.2014 16:22

Цитата:

Сообщение от Deff
Сейчас все стараются ставить полную ссылку, см статьи на Хабре, в частности в связи с разными уязвимостями

Кинь ссылку. Что-то не встречал. Даже не знаю как гуглить. Что за уязвимости? Где?

danik.js 11.12.2014 16:26

Кстати файрффокс походу атрибут подменяет абсолютной ссылкой. ие может также делает. хром нет.
Цитата:

Сообщение от Deff
Можно глянуть самые популрные сайты и поисковики

Например тот же Habr?


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