2012-01-06 3 views
2

J'utilise le dernier Jquery et le script suivant:Jquery remplacer les points par des espaces à l'intérieur de tous les DIVs avec une classe

<script type="text/javascript"> 
$(document).ready(function(){ 
var el = $('.title'); 
el.html(el.html().replace(/\./gi, " ")); 
}); 
</script> 

Ceci est la div:

<div class="title">The.quick.brown.fox</div> 

Ce qu'il fait est remplace tous des points avec des espaces dans un DIV avec classe "title" et vraiment ça marche bien pour ce travail.

Mais j'ai beaucoup de DIVs avec la même classe "title" avec des chaînes différentes et j'ai besoin de tous pour avoir des points remplacés par des espaces. Mais ici le problème apparaît comme tout ce que je reçois est la même chaîne de résultat sur tous ces DIVs "Le renard brun rapide" alors que toutes les chaînes de résultat devraient être différentes ...

Que dois-je faire pour obtenir des points remplacés dans tous les DIVs avec la classe "title" et toutes les différentes chaînes dans chaque DIV?

Merci

Répondre

5

Vous pouvez utiliser each() pour itérer sur les éléments mis en correspondance ou passer une fonction à html() et calculer la nouveau texte là:

$(document).ready(function() { 
    $(".title").html(function(index, currentHtml) { 
     return currentHtml.replace(/\./gi, " "); 
    }); 
}); 
+0

+1 pour faire passer une fonction 'html'. –

+0

Les deux méthodes fonctionnent bien, que dois-je choisir maintenant, y at-il une différence, comme on est plus générique, plus correct ou plus convivial? – CamSpy

+0

Cette méthode * pourrait être plus rapide car elle implique moins d'appels de fonctions. Vous devrez mesurer les deux méthodes pour être sûr, cependant. –

2

Juste utiliser la méthode jQuery each pour itérer sur tous les éléments avec la classe .title:

$(document).ready(function(){ 
    $('.title').each(function(){ 
    $(this).html($(this).html().replace(/\./gi, " ")); 
    }); 
}); 
+0

Merci beaucoup, fonctionne comme un charme :) – CamSpy

1

Tant que vous avez seulement du texte à l'intérieur de votre divs, les fonctions suggérées fonctionneront très bien. Cependant, pour permettre le html arbitraire (comme The.quick.brown <img src='fox.jpg'>) le code devrait être plus précis.

$('.title').each(function() { 
    if (this.nodeType == 3) 
     this.nodeValue = this.nodeValue.replace(/\./g, " "); 
    else 
     $(this).contents().each(arguments.callee); 
}); 

Fondamentalement, vous itérer récursivement sur tous les descendants d'un nœud et de remplacer uniquement les noeuds de type 3 (= texte).

Fiddle: http://jsfiddle.net/jZgUY/

Questions connexes