2012-07-31 1 views
1

de bon href Ce script:Jquery ne pas sélectionner

$(function() { 
    $('a').each(function() { 
     var href = $(this).attr('href'); 
     if ("a:not(http://)") { 
      $(this).attr('href', '/' + href); 
     } 
    }); 
}); 

Ajouter la barre oblique à tous les liens même des liens avec le contenir « http: // » Je ne sais pas pourquoi? Je n'ai aucune erreur?

Des idées sur comment je peux résoudre ce problème?

+0

Qu'attendez-vous de si ("a: not (http: //)") 'faire? – MrOBrian

+1

Pourquoi faites-vous cela? Cela va mettre à jour les liens relatifs, les liens SSL, les liens de fichiers, etc ... – Sinetheta

Répondre

6

Vous mélangé deux choses:

  • sélecteurs de jQuery:

    $(function() { 
        $('a:not([href^="http://"])').each(function() { 
         var href = $(this).attr('href'); 
         $(this).attr('href', '/' + href); 
        }); 
    }); 
    
  • et pur javascript if déclarations:

    $('a').each(function() { 
        var href = $(this).attr('href'); 
        if (href.substr(0, 'http://'.length) == 'http://'){ 
         $(this).attr('href', '/' + href); 
        } 
    }); 
    

Les deux font la même chose.

Notez qu'ils généreront des liens non valides pour d'autres schémas que http (par exemple /https://example.com/index.html). Selon la façon dont nettoyer le code HTML que vous travaillez avec est, vous pouvez regarder simplement le côlon pour identifier des liens absolus:

$(function() { 
    $('a:not([href*=":"])').each(function() { 
     var href = $(this).attr('href'); 
     $(this).attr('href', '/' + href); 
    }); 
}); 
+0

Génial Merci – BostonBB

0

premier code, vous est égal à ce qui suit

$(function() { 
    $('a').each(function() { 
     var href = $(this).attr('href'); 
     if(true) { $(this).attr('href', '/' + href); } 
    }); 
}); 

si vous voulez vraiment mettre à jour href fondée sur la condition, si statetment doit être différent:

$(function() { 
    $('a').each(function() { 
    var href = $(this).attr('href'); 
    if(href.indexOf('http://') == -1) { $(this).attr('href', '/' + href); } 
    }); 
}); 

une autre façon serait celle proposée par @Yogu, où vous simplement ne pas en boucle pour les liens que vous n'êtes pas GOI ng mettre à jour

0

Juste un addon à Yogu,

Rappelez-vous que vous êtes dans le contexte de chaque balise. "A l'intérieur de l'objet lui-même". Ainsi, vous pouvez directement accéder au href.

$('a').each(function() { 
    if (this.href.substr(0, 'http://'.length) == 'http://'){ 
     this.setAttribute('href', '/' + href); 
    } 
}); 
Questions connexes