JQuery как найти все ссылки на текущую страницу?

Цель: найти все ссылки в заданном div, которые указывают на текущую страницу.



Написал вот такой селектор



$('div#top_menu a[href="' + document.URL + '"]')




но он ничего не находит, т.к. ссылки в div относительные (/>),

а document.URL является абсолютной ссылкой (localhost/account/page.aspx).



Вот такой запрос выдает необходимую абсолютную ссылку:



$('div#top_menu a[href="page.aspx"]')[0].href




но как мне по этому свойству сделать запрос?
  • Вопрос задан
  • 7765 просмотров
Решения вопроса 1
lashtal
@lashtal
Отфильтруйте через each:
$('div#top_menu a').each(function(){
if (this.href='xxxxxxxx') { %do_something% }
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
xkrt
@xkrt Автор вопроса
Всем большое спасибо, мне более всего решение хабраюзера , вот такая переделка его решения мне подошла:

$(document).ready(function () {
	$('div#top_menu a').each(function(){
		if (this.href == document.URL) {
			$(this).addClass('b-menu_current');
		}
	});
});


PS: jquery 1.4.1
Ответ написан
omfg
@omfg
Возможно нужно брать последний кусок урлы просто?
$('div#top_menu a[href="' + document.URL.substring(document.URL.lastIndexOf("/")+1,document.URL.length) + '"]')


А в вашем случае (c [0]) вы берете объект js, а не jquery и смотрите у него свойство href (по которому вы и сделали выборку)
Ответ написан
Комментировать

$(function(){
   var path = location.pathname.substring(1);
   if ( path )
     $('div#topmenu a[href$="' + path + '"]').attr('class', 'selected');
 });
Ответ написан
Комментировать
@shsmad
document.location.pathname вам в помощь
Ответ написан
nikitammf
@nikitammf
Решать нужно в обратном порядке. Т.е. взять все ссыли внутри заданного div'a и отфильтровать их по href таким образом что текущая ссылка является окончанием для document.URL, здесь даже jQuery не нужен
var links = document.getElementById('myDiv').getElementsByTagName('a'),
      result = [], $result;
for(var i = links.length - 1, j = 0; i > -1; i--) {
    if( document.URL.indexOf(links[i].href) + links[i].href.length != document.URL.length ) { continue; }
    result[j++] = links[i];
    $result = $result.jquery ? $result.add(links[i]) : $(links[i]);//результат как jquery объект
}


Но есть маленькое «но», например «mysite/» и «mysite/index.html» указывают на одну и ту же страницу, со всеми вытекающими отсюда нюансами
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы