2011-02-03 4 views
0

Мне нужно внедрить deeplinking для моего сайта, поскольку он построен в AJAX. Я понимаю основную идею и получил deeplinking, реализованный для моего верхнего уровня nav. Проблема заключается в том, что мой сайт имеет несколько уровней. Пользователь может щелкнуть верхнюю навигацию, которая добавляет хеш, а затем нажимает на вторичный навигатор и третичный навигатор. Мне также нужно добавить этот вторичный и третичный навигационный клик в хэш ... а затем также удалять этот элемент, когда пользователь нажимает на основной элемент навигации. Я не могу придумать, как это сделать ... любые идеи?Внедрение deeplinking с несколькими уровнями

Ох, и код (JQuery) Я использую для достижения хэширования на первичном СЧЕ:

updateHash : function(hash) { 
    var hashHistory = []; 
    location.hash = hash; 
} 
+0

кого-нибудь? Вопрос непонятен? –

ответ

2

Я не совсем уверен, что вы ищете. Может быть, вам следует показать некоторые конкретные примеры. До тех пор, как о чем-то вроде этого:

function updateHash(hashPath) { 
    if (hashPath.charAt(0) == "/") { 
    location.hash = "#" + hashPath; 
    return; 
    } 

    var currentHash = location.hash.split(/\//); 
    if (currentHash[0]) currentHash[0] = currentHash[0].substr(1); // Loose the # 

    var relHash = hashPath.split(/\//); 

    var part; 
    while (part = relHash.shift()) { 
    if (part == "..") { 
     currentHash.pop(); 
    } else { 
     currentHash.push(part); 
    } 
    } 

    if (currentHash.length > 0) 
     location.hash = "#" + currentHash.join("/"); 
    else 
     location.hash = ""; 
} 

Примеры:

updateHash("/topLevelItem"); 
alert(location.href); // "www.example.com/#/topLevelItem" 

updateHash("secondLevelItem"); 
alert(location.href); // "www.example.com/#/topLevelItem/secondLevelItem" 

updateHash("thirdLevelItem"); 
alert(location.href); // "www.example.com/#/topLevelItem/secondLevelItem/thirdLevelItem" 

updateHash("../differentThirdLevelItem"); 
alert(location.href); // "www.example.com/#/topLevelItem/secondLevelItem/differentThirdLevelItem" 

updateHash("../../differentSecondLevelItem"); 
alert(location.href); // "www.example.com/#/topLevelItem/differentSecondLevelItem" 

updateHash("../anotherSecondLevelItem/anotherThirdLevelItem"); 
alert(location.href); // "www.example.com/#/topLevelItem/anotherSecondLevelItem/anotherThirdLevelItem" 

updateHash(".."); 
alert(location.href); // "www.example.com/#/topLevelItem/anotherSecondLevelItem" 
+0

Этот код выглядит действительно многообещающим, спасибо! Я в замешательстве. Если пользователь нажал на элемент второго уровня, и я использовал функцию updateHash, чтобы добавить хэш, как узнать, что, если пользователь нажимает на другую ссылку второго уровня, которую мне нужно отправить ./differentsecondlevellink, в отличие от/secondlevellink к функции updateHash в следующий раз? Должен ли я отслеживать, на каком уровне пользователь включен, а затем сделать некоторую логику, которая делает что-то вроде, если пользователь находится на втором уровне, и они нажимают ссылку второго уровня, а затем добавляют ../ перед аргументом, отправленным на updateHash? –

+0

Все в порядке ... Мне удалось заставить все это работать сейчас. Большое спасибо за ваш пост ... это действительно помогло мне! –

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