web-dev-qa-db-fra.com

Rechercher et remplacer une chaîne HTML avec jQuery

Les liens de la base de données sont des titres de sites Web et sont affichés sur la page " Article intéressant : Auteur" - mais le lien est parfois une question " Où est la Chine? : GoogleMaps". Le ?: a l'air ridicule alors je voulais remplacer le HTML ?</span>: par ?</span>.

Voici le jQuery que j'ai élaboré:

$('#relatedinfo ul li a').html().replace('?</span>:','?</span>');

Mais cela ne le remplace pas réellement dans le DOM. Comment puis-je obtenir cette chaîne pour réellement changer la page?

9
Daniel

Je suggérerais:

$('#relatedinfo ul li a').html(function(index,html){
    return html.replace(/<\/span>(\:)/,'');
});

Démo de JS Fiddle .

Ou même:

$('#relatedinfo ul li a').text(function(index,text){
    return text.replace(':','');
});

Démo de JS Fiddle .

Une approche mise à jour consiste à vérifier que le dernier caractère de la span se trouve dans le tableau de ['?','!','.'] et, le cas échéant, à supprimer le : de la nodeValue du nextSibling:

$('#relatedinfo ul li a span').text(function(index,text){
    var lastchar = text.split('').pop();
    if (['?','!','.'].indexOf(lastchar) > -1) {
        this.nextSibling.nodeValue = this.nextSibling.nodeValue.replace(':','');
    }
});

Démo de JS Fiddle .

Références:

19
David Thomas

Vous pouvez aussi utiliser regex: 

var rx = new RegExp('(?![^<&]+[>;])' + searchString, 'gi');

$('#relatedinfo').html(function (i, html) {
   return html.replace(rx, '<b>$&</b>')
});

source: jQuery pour rechercher/remplacer du texte HTML lorsqu'il ne se trouve pas dans une balise HTML autre que P, DIV, SPAN, TD

0
Henoc C. K.