2012-01-22 2 views
1

Я просмотрел довольно много (пару часов сейчас) в различных ответах, предоставленных для этого типа сценариев, но я не программист, поэтому я получаю застрял на том, что, вероятно, очень просто. Вот ситуация: у меня есть динамическое меню jquery (на основе jquery lava lamp menu), который позиционирует изображение навигации в зависимости от идентификатора элемента на странице. Этот идентификатор соответствует последней части URL-адреса, а слова «primary-menu-» вставлены перед URL-адресом. Итак, у меня есть:Используйте JQuery для выбора динамического идентификатора на основе URL-адреса

example.com/blog 
example.com/about 

Идентификатор для навигации элемент элемента списка для указанных веб-адресов:

id="primary-menu-blog" 
id="primary-menu-about" 

The (пропущено) Jquery код я должен выбрать эти динамические элементы (которые я скопированный из различных ответов на подобные вопросы) является:

var url = '/'; 
var id = parseInt(url.split('/')[url.split('/').length - 1]); 
var nav = $(this), 
currentPageItem = $("#primary-menu-" + id, nav), 

мне удалось получить это динамическое меню, работая на sample page, который не имеет динамически изменяющиеся идентификаторы. Но, естественно, это не работает с новым кодом, потому что я недостаточно знаю об этом. Но я думаю, что я на правильном пути. Предложения приветствуются.

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

(function($) { 
    $.fn.spasticNav = function(options) { 
    options = $.extend({ 
     overlap : 0, 
     speed : 500, 
     reset : 1500, 
     color : 'none', 
     easing : 'easeOutExpo' 
    }, options); 

    return this.each(function() { 
     # Added by Me, for testing on localhost; 
     var url = 'localhost:8000/'; 
     var id = url.split('/').pop(); 
     # End Added by Me. 
     var nav = $(this), 
     currentPageItem = $("#primary-menu-" + id, nav), 
     blob, 
     reset; 
     $('<li id="blob"></li>').css({ 
     width : currentPageItem.outerWidth(), 
     height : currentPageItem.outerHeight() + options.overlap, 
     left : currentPageItem.position().left, 
     top : currentPageItem.position().top - options.overlap/2, 
     backgroundColor : options.color 
     }).appendTo(this); 
     blob = $('#blob', nav); 
     $('li:not(#blob)', nav).hover(function() { 
     // mouse over 
     clearTimeout(reset); 
     blob.animate(
      { 
      left : $(this).position().left, 
      width : $(this).width() 
     }, 
     { 
      duration : options.speed, 
      easing : options.easing, 
      queue : false 
     } 
     ); 
     }, function() { 
     // mouse out  
     reset = setTimeout(function() { 
      blob.animate({ 
      width : currentPageItem.outerWidth(), 
      left : currentPageItem.position().left 
      }, options.speed) 
     }, options.reset); 

     }); 
    }); // end each 
    }; 
})(jQuery); 
+0

Как насчет того, чтобы рассказать нам, что вы на самом деле пытаетесь сделать. – Sinetheta

ответ

0

Вы даже не должны разобрать URL. Вы можете просто использовать селектор атрибута для выбора какого-либо элемента, идентификатор начинается с primary-menu-:

var currentPageItem = $(this).find('[id^="primary-menu-"]'); 

Если вы абсолютно необходимо использовать URL-адрес, используйте:

var id = window.location.href.split('#')[0].split('?')[0].split('/').pop(), 
    currentPageItem = $(this).find('#primary-menu-' + url); 
+1

, который все еще ничего не сделает для динамически добавленного контента. Пока он не покажет, какой у него план для этого селектора, мы не сможем начать неизбежное «omg use .live()» «omg .live() развращен« обсуждение;) – Sinetheta

+0

Спасибо за отзыв. То, что я пытаюсь сделать, это выбрать (динамический) идентификатор. Вот и все. Код jquery работает отлично, когда я использую статический идентификатор, такой как «selected»: он перемещает изображение по списку ссылок на навигацию и возвращается к «выбранному». Единственное, что я меняю, это то, что он выбирает. – rosslaird

0

Вы можете улучшить свой код как это.

var url = 'example.com/blog'; 
var id = url.split('/').pop(); 
var nav = $(this), 
currentPageItem = $("#primary-menu-" + id, nav); 
+0

Используйте 'url.split ('/'). Pop()' вместо 'url.split ('/'). Reverse() [0]'. –

+0

@JosephSilber - Спасибо, полностью забыл: P – ShankarSangoli

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