2010-02-10 3 views
1

Dans la méthode ci-dessous, je peux rechercher divs avec une classe de bar pour le texte foo et souligner le texte contenu dans:paramètre jQuery Pass pour filtrer la déclaration avec clause contient

function UnderlineText() { 
    $(".bar").filter(":contains(foo)").css("text-decoration", "underline"); 
} 

Mais je voudrais passer un paramètre à la méthode contenant à la place la chaîne foo.

J'ai essayé différentes permutations comme on le voit dans une question précédente au sujet de la dépréciée .contains

mais je ne peux pas le faire fonctionner.

Quelle est la meilleure façon d'y parvenir?

function UnderlineText(searchText) { 
    $(".bar").filter(":contains(*searchText*)").css("text-decoration", "underline"); 
} 

Répondre

4
function UnderlineText(searchText) { 
    $(".bar").filter(":contains("+searchText+")").css("text-decoration", "underline"); 
} 

résoudrait le problème.

+0

Oui, cela fonctionne très bien, merci. Cela a dû être ma combinaison de guillemets simples et doubles qui l'empêchait de travailler pour moi. –

0

Même si vous réussissez à faire fonctionner le sélecteur, vous devez sélectionner l'élément contenant tout (p, span, div, etc.), de sorte qu'un simple appel css() finira par souligner tout le bloc de texte. Pour souligner la partie spécifique, vous devrez utiliser quelque chose comme:

function underline(query) { 
    $('.bar').filter(':contains("' + query+ '")').each(function() { 
    var html = $(this).html(); 
    html = html.replace(query, '<span style="text-decoration: underline">' + query + '</span>'; 
    $(this).html(html); 
    }); 
} 

C'est toujours pas bon, car il pourrait remplacer la requête alors qu'il est dans un attribut ou somesuch, mais il est une étape vers l'obtention des choses souligné séparément.

+0

Eh bien, je pense que c'est très bien. Peut-être y a-t-il une solution plus élégante mais soulignant que le texte recherché est une excellente idée. –

Questions connexes