En la primera parte de este tutorial expliqué como hacer funcionar una web modular donde el contenido cargara dinamicamente sin recargar la página usando AJAX sin embargo sólo funcionaba con links del menú y no con links que estuvieron dentro de las páginas cargadas.

Hacer funcionar ajax en links internos

Ese código funciona con el menu pero para que funcione incluso en links de páginas cargadas usando AJAX debemos usar el evento LIVE de jquery para ello basta modificar una línea de código.

1
2
3
4
5
$('.ajaxmenu').livequery('click',function(){
            var loadUrl = $(this).attr('href');
              $("#contenido").html(ajax_load).load(loadUrl);
            return false;
     });

¿Cómo hago funcionar el código si uso anclas?

Esto es más complicado ya que hay que calcular la ubicación de las anclas y generar un scroll

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<script language="javascript">
$(document).ready(function(){
$.ajaxSetup ({
    cache: false
});
var ajax_load = "<img src='img/load.gif' alt='loading...' />";
$(".ajaxmenu").live("click", function(){
    myUrl= $(this).attr('href');
    if (myUrl.match('#')) {
          var myAnchor = myUrl.split('#')[1];
          /*Ahora arreglamos el URL - para evitar problemas en ie6*/
          var loadUrl = myUrl.split('#')[0];
    }else{
        var loadUrl = $(this).attr('href');
    }
    $("#contenido").html(ajax_load).load(loadUrl,function(){
        if (myUrl.match('#')) {
        /*Calculamos la distancia entre el anchor y la pagina y animamos*/
          var targetOffset = $("a[name='"+myAnchor+"']").offset().top;
          $('html').animate({scrollTop: targetOffset}, 400);
        }
     }
    );
    return false;      
});
});
</script>