2010-10-04 2 views
1

Actuellement, ma compréhension du barbecue jQuery est il me demande d'utiliser un href comme href = « #/stufff/123/13 »Barbecue jQuery, HREF avec un ensemble de classe de liaison profonde --- Possible?

un problème qui est il me demande d'ajouter un # à toutes mes URL dans le site qui signifie alors les navigateurs non-javascript ne peut pas utiliser le site ...

Ma question, est-il un moyen que je peux simplement ajouter une classe à tous les HREF que je veux profondément lié? quelque chose comme class = "deep-link-it-please" .... Des idées? Il crée également un mal de tête dans Rails qui utilise link_to qui ne supporte pas l'ajout d'un hash # avant l'URL .. merci

+0

Il me semble que le script BBQ fait tout cela pour vous. Tout ce que vous devez faire est d'exécuter le script et laisser vos liens 'href' comme vous le feriez normalement. – Mottie

+1

Je souhaite, cela ne fonctionne pas. encore besoin d'ajouter un # devant les liens. Existe-t-il un moyen de classe pour le faire? – AnApprentice

Répondre

1

Qu'en est-il de l'ajout d'un hachage aux liens que vous voulez hijax?

$('.bbq-nav a').each(function(){ 
     var nice = $(this).attr('href'); 
     $(this).attr('href','#' + nice); 
    }); 
1

Vous ne devriez pas avoir besoin d'ajouter le hachage à vos URL si vous envisagez de les pirater de toute façon. Avec des liens normaux à l'intérieur de mon conteneur div # et tout semble fonctionner correctement avec cette implémentation:

$("#container a").live('click', function(){ 
    var hrefRequested = $(this).attr("href"); 

    // Push this URL "state" onto the history hash. 
    $.bbq.pushState({ url: hrefRequested }); 

    // Prevent the default click behavior. 
    return false; 
}); 

// Bind a callback that executes when document.location.hash changes. 
$(window).bind("hashchange", function(e) { 
    var url = $.bbq.getState("url"); 

    // Used to make sure that when you back up to the page you came in on 
    // you don't get an empty page. 
    if (url == undefined) { url = window.location.href; } 

    $('#content-container').load(url + ' #container', function(response, status, xhr) { 
     if (status == "success") { 
      console.log('hooray!'); 

      // document.title = ; 
      // document.location.href = hrefRequested; 

      // return false; 
     } 

     if (status == "error") { 
      var msg = "Sorry but there was an error: "; 
      $("#error").html(msg + xhr.status + " " + xhr.statusText); 
     } 
    }); 

// You probably want to actually do something useful here.. 
}); 

// Since the event is only triggered when the hash changes, we need 
// to trigger the event now, to handle the hash the page may have 
// loaded with. 
$(window).trigger("hashchange");