Étant donné un contenu comme:
<div class="message">Somethsg1</div>
<div class="message">Something</div>
<div class="message">Ssething</div>
<div class="message">Something Else</div>
<div class="message">Something da</div>
<div class="message">Somethin2g</div>
Vous pouvez utiliser quelque chose comme:
//your array
var words = [
{
word: 'Something',
link: 'http://www.something.com'
},
{
word: 'Something Else',
link: 'http://www.something.com/else'
}
];
//iterate the array
$.each(words,
function() {
//find an element with class "message" that contains "word" (from array)
$('.message:contains("' + this.word + '")')
//substitute html with a nice anchor tag
.html('<a href="' + this.link + '">' + this.link + '</a>');
}
);
Cette solution a un problème immédiat si (montré dans le exemple aussi). Si vous recherchez par exemple pour Quelque chose et vous trouvez Quelque chose de beau, le "contient" sera correspondre.
Si vous voulez une sélection stricte, vous devez faire:
//for each array element
$.each(words,
function() {
//store it ("this" is gonna become the dom element in the next function)
var search = this;
$('.message').each(
function() {
//if it's exactly the same
if ($(this).text() === search.word) {
//do your magic tricks
$(this).html('<a href="' + search.link + '">' + search.link + '</a>');
}
}
);
}
);
Il est votre choix si vous souhaitez itérer tous les éléments du tableau d'abord, puis tous les Doms, ou l'inverse. Cela dépend aussi du type de "mots" que vous allez chercher (voir les deux exemples pour le "pourquoi"). BIG AVERTISSEMENT: si le tableau contient du contenu défini par l'utilisateur, vous devez le désinfecter avant de l'injecter dans le code html des éléments!
Je suggère de déplacer à Serverside. – LiraNuna
Um .. CPU Hungry? Remplacement de texte simple? Et, vous devez fournir plus d'informations générales sur cette page, y compris les éléments dont vous avez affaire, la structure, vous savez .. l'habitude. –
@LiraNuna: Ne peut malheureusement pas. @meder: Ajout d'informations supplémentaires. –