Comme indiqué dans le titre, j'aimerais trouver quelque chose comme :contains()
mais pour correspondre à une chaîne exacte. En d'autres termes, cela ne devrait pas être une correspondance partielle. Par exemple dans ce cas:
<div id="id">
<p>John</p>
<p>Johny</p>
</div>
$("#id:contains('John')")
correspondra à la fois John
et Johny
, alors que j'aimerais ne faire correspondre que John
.
Merci d'avance.
EDIT: ES2015 solution monocouche, au cas où quelqu'un le chercherait:
const nodes = [...document.querySelectorAll('#id > *')].filter(node => node.textContent === 'John');
console.log(nodes);
/* Output console formatting */
.as-console-wrapper { top: 0; }
.as-console { height: 100%; }
<div id="id">
<p>John</p>
<p>Johny</p>
</div>
Vous pouvez utiliser filter
pour cela:
$('#id').find('*').filter(function() {
return $(this).text() === 'John';
});
Edit: comme performance, si vous en savez plus sur la nature de ce que vous recherchez (par exemple, que les nœuds sont des enfants immédiats de #id
), il serait plus efficace d’utiliser quelque chose comme .children()
au lieu de .find('*')
.
En voici un exemple, si vous voulez le voir en action: http://jsfiddle.net/Akuyq/
la réponse de jmar777 m'a aidé à résoudre ce problème, mais pour éviter de chercher dans tout ce que j'avais commencé avec le sélecteur: contient et filtrer ses résultats
var $results = $('#id p:contains("John")').filter(function() {
return $(this).text() === 'John';
});
Voici un violon mis à jour http://jsfiddle.net/Akuyq/34/
Vous pouvez essayer d’écrire une expression régulière et d’en faire une recherche: Validation du champ d’expression régulière dans jQuery
La méthode simple consiste à "sélectionner un élément par correspondance exacte" à l'aide d'une pseudo-fonction.