2010-06-13 4 views
0

J'ai écrit un script jQuery simple qui modifie la balise de hachage d'un lien. Je fais cela parce que j'utilise des commentaires IntenseDebate dans Wordpress mais le lien de commentaire lie encore l'id remplacé des anciens commentaires. J'utilise jQuery de sorte que si javascript est activé, l'utilisateur peut cliquer sur le lien des commentaires et il les amènera aux commentaires IntenseDebate. Si elle n'est pas activée, elle les amènera aux commentaires traditionnels (car IntenseDebate requiert javascript pour fonctionner).Le code jQuery ne s'exécute pas lorsque le DOM est prêt

Le problème que je suis réside dans ce script pour modifier la balise de hachage à la fin du lien. Actuellement l'URL "someurl.com/ #respond" mais j'ai besoin du script pour le changer en "someurl.com/ #comments". Ce qui se passe, c'est que le script ne fonctionne pas, mais je crois que ma syntaxe est correcte, j'ai donc décidé d'essayer de copier et coller le code dans la console de Firebug et le code exécuté parfaitement. Je pouvais voir que le lien que j'essayais de changer était maintenant correct, et je pouvais cliquer dessus et ça marchait comme je le voulais. Donc ce que je ne comprends pas c'est pourquoi le code ne s'exécute pas quand il est supposé le faire. J'utilise $ (document) .ready() et j'ai d'autres jQuery sur la page qui s'exécute très bien. J'ai même testé sur une simple page HTML loin de tous les problèmes qui pourraient être causés par Wordpress et j'ai reçu le même résultat. Est-ce que quelqu'un sait pourquoi cela pourrait se produire?

Voici mon code (j'utilise noConflict parce que Wordpress utilise d'autres cadres):

jQuery.noConflict(); 
jQuery(document).ready(function($) { 
$("a[href$='respond']").each(function() { 
    this.href = this.href.replace("respond", "comments"); 
}); 
})(jQuery); 

Merci beaucoup pour votre aide!

Répondre

3

Vous invoquez le résultat de jQuery(document).ready() qui vous donnera une erreur de type que vous recherchez ce modèle:

(function ($) { 
    // inside this function, you can use `$` 
    $(document).ready(function() { 
    $("a[href$='respond']").each(function() { 
     this.href = this.href.replace("respond", "comments"); 
    }); 
    }); 
})(jQuery.noConflict()); 

Dans le code ci-dessus vous déclarer une fonction anonyme qui est appelée immédiatement, en passant le résultat de jQuery.noConflict() comme $ argument à cette fonction.

+0

Ah, merci, ce code ne produit pas ce type d'erreur dont se plaignait Firebug. Cependant, il ne s'exécute pas comme le mien ne l'a pas fait. Lorsque la page ne charge rien ne change, mais si je la colle dans la console et l'exécute, cela fonctionne parfaitement. –

1

Vous n'avez pas besoin de passer d'arguments lors de l'appel de .ready(). jQuery transmet l'objet jQuery en tant que paramètre initial lorsqu'il appelle votre fonction.

jQuery.noConflict(); 
jQuery(document).ready(function($) { 
    $("a[href$='respond']").each(function() { 
     this.href = this.href.replace("respond", "comments"); 
    }); 
}); 

http://api.jquery.com/ready/

0

La ligne intérieure doit être:

jQuery.noConflict(); 
jQuery(document).ready(function($) { 
    $("a[href$='respond']").each(function() { 
     $(this).attr("href", $(this).attr('href').replace("respond", "comments")); 
    }); 
}); 

Le navigateur n'aime pas remplacer la coulée directement sur this.href;

Modifier: ou peut-être que c'était juste mon navigateur ayant un hissy.

Questions connexes