2012-09-06 15 views
11

Sto tentando di aggiungere alcuni collegamenti hash (nel formato di una tabella di contenuto, per facilitare la navigazione della pagina Web) a questo sito in cui viene utilizzato un tag <base>.Come ignorare il tag <base> senza rimuovere il tag stesso?

Ora ovviamente a causa del tag base, ogni altro tag relativo sarà relativo al tag base href. Per poter creare questa tabella di contenuto interna con i collegamenti che puntano a parti diverse della pagina specifica, ho bisogno di ottenere l'URL predefinito (prima che il tag base sia in vigore) in modo che i collegamenti interni possano funzionare correttamente.

C'è un modo per aggirare il tag base e realizzare questo?

+0

"link interni che puntano a diverse parti della pagina specifica" ... Stai parlando di link hash, come: 'href = "# scheda-2"'? Puoi dare qualche esempio? –

risposta

8

L'effetto del tag base è globale per il documento e l'unico modo per ignorare l'effetto di <base href="..."> consiste nell'utilizzare URL assoluti.

È possibile utilizzare window.location in JavaScript per ottenere l'URL della pagina stessa, nel caso in cui il documento sia stato recuperato tramite HTTP. E potresti usarlo per costruire URL assoluti.

Il tag base normalmente non è necessario in questi giorni. È preferibile utilizzare tecnologie server-side che consentono di costruire indirizzi da uno o più indirizzi di base. Quindi molto probabilmente l'approccio migliore è quello di sbarazzarsi del tag.

+1

Uso il software di e-commerce che purtroppo * si basa * sul tag '', quindi è ancora disponibile. Forse un fatto poco conosciuto: i collegamenti '../ relative' funzionano con il tag base se la base è una sottodirectory. –

+1

I collegamenti che iniziano con ../ funzionano naturalmente con un indirizzo di base che contiene un segmento nella parte del percorso. Non stai quindi ignorando il tag 'base', semplicemente spostandoti sotto la sua influenza. –

+0

Grazie mille. Sono riuscito a ottenere l'URL predefinito della mia pagina. – sSmacKk

3

Si potrebbe 'fix' questo utilizzando alcuni jQuery javascript e -

// get all the internal anchors inside #article 
$('#article a').each(
     function() { 
      // get the href attribute 
      href = $(this).attr('href'); 
      // does it have a href? 
      if (href) { 
       // does it have an internal anchor? 
       if (href.match(/#/i)) { 
        // append window.location and write back to the href Attribute 
        new_href = window.location + href; 
        $(this).attr('href', new_href); 
       } 
      } 
     } 
    ); 
+1

Grazie per la risposta. È meglio usare 'var' quando si definiscono le variabili, altrimenti verranno definite nell'ambito globale. –

1

L'aggiunta di un / prima che il collegamento dovrebbe fare il lavoro. Diciamo che hai <base href="/assets/images/" />. Se si utilizza <img src="logo.png" />, carica /assets/images/logo.png. Altrimenti, se usi <img src="/logo.png" />, carica /logo.png dalla directory principale.

+0

* L'aggiunta di un/* è metà corretta ... Supponendo di aver saltato il protocollo e lasciato il doppio '//'. – yckart

1

In alternativa, per avere URL locali e mantenere la base href puoi provare questo.

$('a.local').each(
 
    function() { 
 
\t \t // get the href attribute 
 
\t \t var href = $(this).attr('href'); 
 
\t \t // does it have a href? 
 
\t \t if (href) { 
 
\t \t \t var lastSlash = window.location.toString().lastIndexOf("/"); 
 
\t \t \t var new_href = window.location.toString().substr(0, lastSlash + 1) + href; 
 
\t \t \t $(this).attr('href', new_href); 
 
\t \t } 
 
\t });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<base href="http://www.google.com"> 
 
<a class="local" href="mylocalpage.html">local page</a> 
 
<a href="pageOnRemoteServer.html">remote page</a>

Problemi correlati