URL фильтра Jquery - PullRequest
       14

URL фильтра Jquery

0 голосов
/ 07 ноября 2010

Мне кажется, что я на правильном пути, но мне нужна ваша помощь.

Я использую этот код для получения параметра URL

 function $urlParam(name){ 
    if(window.location.href.indexOf(name) != -1) {
        var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href); 
        return results[1] || 0; 
    }
    return 0;

} 


$(function() {
var $page='#'+$urlParam('id');

 });

И затем я попытался отфильтровать эти данныес

$side_menu.find('> li > a').filter($page).click();

Но это не работает.

Могу ли я что-нибудь сделать, чтобы я мог фильтровать данные с помощью переменной $ page?

Если вам нужны дополнительные данные, я был бы рад предоставить их вам.

Заранее спасибо, Прокка

Ответы [ 3 ]

0 голосов
/ 08 ноября 2010

Что-то вроде:

<script>
// Define event handler generator
function handleClick(url) {
    var location = url;
    return function() {
        window.location = location;
        return false;
    }
}
$(function () { // onReady
    $("A").each(function() { // connect an event handler for every A
        // Generate handler for the correct URL
        var handler = handleClick($(this).attr("href"));
        // Connect generated event handler
        $(this).click(handler);
    });
}
</script>

Должно позволить вам сохранить ваши существующие URL-адреса работающими так, как они уже работают (для пользователей, не являющихся JS), но для всех остальных у вас будет событие, которое вы запускаете и которое вызываетто же самое, но с возможностью jQuery-invoke.

0 голосов
/ 09 ноября 2010

Спасибо всем большое!

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

Теперь это выглядит так:

     function $urlParam(name){ 
    if(window.location.href.indexOf(name) != -1) {
        var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href); 
        return results[1] || 0; 
    }
    return 0;


};

И после этого

var page='#'+$urlParam('id');
if (page== '#0')
     strana ='#News';


$side_menu.find('> li > a').filter($(page)).click();

И теперь почти все прекрасно работает, кроме Google Chrome, который только выбирает вкладку, но не показывает ее содержимое. Я прочитал здесь jQuery find (), возвращающий пустую строку в Google Chrome , что это о Chrome и HTML в Ajax.

Любой совет для этого или ссылки или сделать другой вопрос?

Спасибо всем еще раз, особенно machineghost!

0 голосов
/ 07 ноября 2010

Хорошо, сначала, вместо:

window.location.href

Вы также можете использовать:

window.location.search

, поскольку это только часть параметра URL (нужная часть). Также ваша переменная:

$page

... соглашение об именовании переменных "$ foo" обычно предназначено для применения к переменным объекта jQuery. Другими словами:

var foo = "foo";
var $foo = $(foo);

Так что (если у вас нет своего собственного, другого соглашения), я думаю, что $ page действительно должен быть назван page.

Что касается:

$side_menu.find('> li > a').filter($page).click();

Не могу сказать точно, но похоже, что вы фильтруете по идентификатору. Это верно? Если это так, фильтр не имеет смысла; Идентификаторы по определению уникальны на странице, поэтому просто выполните:

$($page).click();

- это одно и то же (даже с точки зрения производительности).

Но это не работает. Что я могу сделать, чтобы фильтровать данные с помощью переменной $ page?

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

console.log($page);
$side_menu.find('> li > a').filter($page).click();

Хорошо, если вы используете Firebug или браузер с консолью (если нет ... вы должны использовать Firebug ;-), но вы также можете просто изменить его на «alert ($ page)»).

Когда вы это сделаете, вы должны увидеть, какой селектор вы действительно используете. Скорее всего что-то не так с этим. Если вы не видите ничего очевидного, попробуйте добавить:

console.log($page); console.log($($page));
$side_menu.find('> li > a').filter($page).click();

(трюк с предупреждением не сработает). Это должно показать вам, какие элементы (если таковые имеются) jQuery выбран с помощью вашего селектора. Между этим и просмотром самого селектора вы, скорее всего, найдете проблему (а если нет, возможно, попробуйте поиграть с запуском команд в консоли Firebug вручную)

...