2013-08-08 3 views
2

Je sais comment faire cela en php, mais j'ai besoin que cela soit fait en javascript/jquery.Remplacer tout <img> tag avec img alt text

J'essaie quelque chose comme ce qui suit:

$('#NewBox').html($('#OldBox').html().Replace('/<img(.*)alt="(.*)"\>/g', "$2")); 

Je ne pense pas que le javascript a un preg_replace, et tout ce que je connais est la méthode remplacer. utiliser "g" devrait remplacer toutes les instances par le second paramètre de la regex (étant alt). Une idée de pourquoi cela ne fonctionne pas?

MISE À JOUR: (espérons-ce comprend mieux ce que je veux)

J'ai une chaîne telle que celle-ci:

var str = 'This is a string with <img src="./images/logo.png" alt="logo" /> an image' 

Je veux remplacer tous les tags à l'intérieur de cette chaîne avec l'alt il est donc maintenant:

'This is a string with logo an image' 
+0

Ok, il y a peut-être quelque chose qui me passe par la tête, mais à quoi sert le backslash? – GreatBigBore

+0

@GreatBigBore Je l'ai juste utilisé pour échapper le texte "like \" this \ "" – MysteryDev

+1

Mais vous évadez une cornière. Pourquoi? – GreatBigBore

Répondre

1

Vous devez éviter les expressions régulières lorsque vous pouvez travailler en toute sécurité avec un outil d'analyse syntaxique. jQuery peut analyser ce code HTML pour vous.

var str = 'This is a string with <img src="./images/logo.png" alt="logo" /> an image'; 
console.log('input: '+str); 

// first create an element and add the string as its HTML 
var container = $('<div>').html(str); 

// then use .replaceWith(function()) to modify the HTML structure 
container.find('img').replaceWith(function() { return this.alt; }) 

// finally get the HTML back as string 
var strAlt = container.html(); 
console.log('output: '+strAlt); 

Sortie:

input: This is a string with <img src="./images/logo.png" alt="logo" /> an image 
output: This is a string with logo an image 

Voir demo fiddle.

+0

ne fonctionne toujours pas mais merci quand même. Je vais accepter cela comme une réponse. – MysteryDev

+0

Vous ne devez pas l'accepter du tout si cela ne fonctionne pas. Comment ça ne marche pas? Avez-vous essayé la démo? Si vous fournissez plus de détails, nous pouvons vous aider davantage. – acdcjunior

+0

nevermind Je l'ai eu le travail, merci cela fonctionne parfaitement! – MysteryDev

8

Don't use regular expressions to manipulate HTML. Utilisez DOM. Cela va double lorsqu'il s'agit de JavaScript côté client, car la modification du HTML peut interrompre la liaison du gestionnaire d'événements. Juste obtenir chaque image, boucle sur chacun d'eux, et remplacer avec la valeur de l'attribut alt.

$('img').each(function() { 
    $(this).replaceWith(
    $(this).attr('alt') 
); 
}); 
+0

merci Je vais essayer. – MysteryDev

+0

laisse dire que j'ai une zone de texte avec ce texte. Comment pourrais-je le faire fonctionner avec l'utilisation de ceci? – MysteryDev