2013-11-07 2 views
0

У меня есть меню в Wordpress, в котором используется система WP Menu. Все ссылки в основном пользовательские ссылки, выводящие следующие классы (WP удалены для краткости):Замените значение href, получив текущий URL-адрес

<ul> 
<li><a href="http://mysite.com/about">About</a> 
<ul> 
    <li><a href="http://mysite.com/about/#section-1">Section 1</a></li> 
    <li><a href="http://mysite.com/about/#section-2">Section 2</a></li> 
    <li><a href="http://mysite.com/about/#section-3">Section 3</a></li> 
    </ul> 
</li> 

<li><a href="http://mysite.com/services">Services</a> 
<ul> 
    <li><a href="http://mysite.com/services/#section-1">Section 1</a></li> 
    <li><a href="http://mysite.com/services/#section-2">Section 2</a></li> 
    <li><a href="http://mysite.com/services/#section-3">Section 3</a></li> 
    <li><a href="http://mysite.com/services/#section-4">Section 4</a></li> 
    </ul> 
</li> 
</ul> 

Я пытаюсь удалить доменную часть URL, если родительская страница просматривается, так что если бы я просмотр О странице ссылки в меню изменится на:

<li><a href="http://mysite.com/about">About</a> 
<ul> 
    <li><a href="#section-1">Section 1</a></li> 
    <li><a href="#section-2">Section 2</a></li> 
    <li><a href="#section-3">Section 3</a></li> 
    </ul> 
</li> 

<li><a href="http://mysite.com/services">Services</a> 
<ul> 
    <li><a href="http://mysite.com/services/#section-1">Section 1</a></li> 
    <li><a href="http://mysite.com/services/#section-2">Section 2</a></li> 
    <li><a href="http://mysite.com/services/#section-3">Section 3</a></li> 
    <li><a href="http://mysite.com/services/#section-4">Section 4</a></li> 
    </ul> 
</li> 

</ul> 

у меня есть проблема с JQuery в том, что я не могу настроить таргетинг каждой конкретной страницы, потому что страницы будут неизвестны, поэтому я это нужно, чтобы получить URL и матч это с правильной частью меню, чтобы изменить ссылки. Я попытался это, но его слишком специфичны:

if (window.location.href.indexOf("about") != -1) { 

    //do something 

} else { 

    //do something else 

} 

EDIT

Я только хочу, чтобы изменить ссылки в меню для текущей страницы. Ответы до сих пор меняют всю ссылку в меню, я просто хочу настроить таргетинг на ссылки, найденные на той же странице.

ответ

2

Другой вариант ...

$(function() { 
    $("a[href*='" + window.location.pathname + "#']").attr("href", function() { 
     return "#" + this.href.split("#")[1]; 
    }); 
}); 

Найдет все ссылки с текущей страницы и # в них и зафиксировать HREF значение соответственно.

+0

Боюсь, что это не работает. Ни один URL-адрес не может быть заменен или изменен в зависимости от того, что я вижу. – egr103

+0

Незначительная ошибка с моей стороны, не включая конечный '/' на URL-адрес. Я также изменил 'window.location.href' на' window.location.pathname', поэтому он не включает полный url (с любыми # значениями и querystring). Это должно быть лучше сейчас :) – Archer

+0

Я вижу синтаксическую ошибку в инструментах dev, которая читает: синтаксическая ошибка, нераспознанное выражение: a [href * =/cjo/testing // #] - Произошла одна и та же ошибка, если я удалю лишнюю косую черту – egr103

0

Попробуйте это,

$('a').each(function(){ 
    // check the anchor tab href has location.href or not 
    if($(this).attr('href').indexOf(window.location.href) != -1) 
    { 
     // some code to replace location.href to blank 
     var href=$(this).attr('href').replace(window.location.href,''); 
     $(this).attr('href',href); 
    } 
}); 

В качестве альтернативы, попробовать это,

$('a').each(function(){ 
    if(this.href.indexOf('#') != -1) 
    { 
     var href=this.href.split('#')[1]; 
     this.href = '#'+href; 
    } 
}); 
+0

Обратите внимание, что нет необходимости обертывать собственный элемент DOM (якорь) в объект jQuery. 'this.href = this.href.replace (window.location.href, '');' делает то же самое. –

+0

Оба образца кода приносят ошибку: невозможно вызвать метод 'indexOf' неопределенного – egr103

3

DEMO here

Во-первых, добавить класс sections к ul элементу, чтобы сделать его легко настроить таргетинг.

<ul class="sections"> 
    <li><a href="http://mysite.com/about/#section-1">Section 1</a> 
    </li> 
    <li><a href="http://mysite.com/about/#section-2">Section 2</a> 
    </li> 
    <li><a href="http://mysite.com/about/#section-3">Section 3</a> 
    </li> 
</ul> 

Использование .map() заменить href для каждого якоря.

EDIT - на основе вашего нового обновления & Мне понравилось обновление @ Archer. Это должно сработать.

$(".sections a[href* = '" + window.location.pathname + "/#']").map(function(){ 
    var currentsection = this.href.split('/').pop(); 
    this.href = currentsection; 
}); 
+2

+1 для умного использования 'pop'. –

+0

@BenjaminGruenbaum спасибо :) – Krishna

+0

@Archer - расскажите, пожалуйста, такой сценарий, и я исправлю это. – Krishna

Смежные вопросы