2009-12-17 2 views
1

Я использую jQuery для создания веб-сайта, и я хочу, чтобы иметь возможность навигации в отдельном div из моего контента. Кроме того, я хочу иметь некоторую систему навигации с вкладками, чтобы я мог щелкнуть ссылку в навигации, и она будет загружать контент в основной контент div. В принципе, я хочу сделать это, чтобы я мог просто поддерживать одну страницу со всем содержимым, а не кучу страниц для каждого раздела. Я включил картину, которая, мы надеемся, сделать мой вопрос гораздо более ясным (правой кнопкой мыши и «VIW изображение», это слишком мало на этой странице):Ссылка в одном div, пытающаяся загрузить содержимое в отдельном div

example http://img402.imageshack.us/img402/1733/examplew.jpg

+6

+1 за рисованный круги! – Joel

+0

Вы хотите сделать все на стороне клиента или у вас есть db для извлечения данных? –

ответ

2

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

$("#navigation").on("click", "a", function(e){ 
    e.preventDefault(); 
    $("#content").load($(this).prop("href")); 
}); 

Который работает со следующей разметкой:

<div id="navigation"> 
    <a href="home.html">Home</a> 
    <a href="gallery.html">Gallery</a> 
</div> 
<div id="content"><!-- content will load here --></div> 
+0

симпатичный работа @Jonathan Sampson.Одна проблема, однако, как вы загружаете первую ссылку по умолчанию и подсвечиваете ли она ??? И как вы гарантируете, что ссылки, которые вы нажали, активны? –

+0

Я обновил код, но вы можете щелкнуть по первой ссылке по умолчанию следующим образом: '$ (" # navigation "). On (" click "," a ", function (e) {e.preventDefault(); $ ("# content"). load ($ (this) .prop ("href"));}). find ("a: first"). trigger ("click"); ' – Sampson

+0

Я думаю, вы меня неправильно поняли. Я имел в виду, как вы выделяете активную ссылку ??? NB. Я попробовал ваш новый код, но он не сработал ??? Еще на старом! Что я делаю не так??? –

0

Пусть ваши навигационные ссылки изменить HTML вашего центра div
<a href="#" onclick="$('#centerDiv').html('your content');">Click me<a>

Если вы хотите, чтобы это было более динамичное использование ajax для его загрузки.

и если вы хотите, чтобы получить немного больше фантазии попробовать Tab виджет

6
$('#navlink').click(function() { 
    $("#maindiv").load("/url.html"); 
    return false; 
}); 
0

Использование Ajax с JQuery его довольно проста и полностью управляема:

$('#navlink').click(function() { 
        $.ajax({ 
         type: "GET", 
         url: 'URL_OF_THE_RESOURCE', 
         //(maybe you can hold this in the href attr of the anchor tag) 
         //in that case you can use $(this).attr('href'); 
         dataType: "text/html", //spectating HTML back from the server 
         timeout: 8000, //Wait 8 second for the response 
         error: function() { 
          alert('ERROR');//case of server error or timeout give a feedback to the user 
         }, //end error 
         success: function(html) { 
          $('#mainDiv').html(html); //Replace the content with the new HTML 
         } //end succes 
        }); //end ajax 
        return false; 
       }); //end click 

Вместо usign идентификатор, вы можете использовать фиктивный класс (например, «navlink») для всех этих навигационных систем, поэтому вместо указания селектора на идентификатор ссылайтесь на него следующим образом:

$('.navlink').click(function(){ 
... 

и параметр URL будет:

url: $(this).attr('href'), 

Таким образом, вы просто установить один раз и все ссылки будут получать функциональные и по-прежнему оказывать поддержку пользователям, которые не имеют JS активно.

0

Это вызывает функцию jQuery load()! Перейдите на страницу http://remysharp.com/jquery-api/ и найдите «load» - вам просто нужно настроить таргетинг на div.

Кстати, это своего рода альтернатива кадрам или серверной стороне. Единственное плохое в этом отношении заключается в том, что поисковые системы не смогут отслеживать ваши ссылки.

+0

Правильный дизайн должен изящно деградировать, если javascript не включен. Просто поместите URL страницы, которую вы загружаете, как href привязки, а затем возвращаете false, как в решении Дарина. На загруженной странице не будет навигатора, но это не проблема для сканеров, чем людей. – Joel

1

Учитывая, что вы хотите одну страницу со всем содержимым, вы можете просто скрыть все, кроме одного основного div, с помощью css, а затем использовать javascript/jQuery для отображения одного div при нажатии на вкладку и скрыть все остальные (основные div).

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