y a-t-il une méthode dans JQuery pour trouver l'élément qui contient la première instance d'une chaîne?
<ul>
<li>1</li> <-- find this
<li>1</li>
<li>1</li>
<li>2</li> <-- find this
<li>2</li>
<li>3</li> <-- find this
<li>3</li>
<li>3</li>
<li>3</li>
</ul>
5 Réponses :
Une option utilise un objet p> SET code> pour suivre le code> pour obtenir tous tous les objets définir code> objet. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>1</li> <!-- find this -->
<li>1</li>
<li>1</li>
<li>2</li> <!-- find this -->
<li>2</li>
<li>3</li> <!-- find this -->
<li>3</li>
<li>3</li>
<li>3</li>
</ul>
Solution géniale. Aimer l'utilisation de l'ensemble <3
Vous voudrez vérifier la compatibilité du navigateur avant d'utiliser définir code>. Un moyen plus compatible de faire la même chose est var obj = {} code>, obj [clé] = true; code> Pour ajouter quelque chose à l'ensemble, et si ( obj [clé]) code> pour vérifier l'adhésion.
Basé sur DOC, l'utilisation de base de définir code> est compatible même avec IE 11. développeur.mozilla.org/en-us/docs/web/javascript/reference/... .. Ou vous pouvez utiliser le profileur (juste pour être sûr) aussi :)
Une solution possible consiste à utiliser .Filter () pour obtenir les éléments dont p> Texte () code> est distinct du texte précédent code> li's code>. Remarque Cette solution ne fonctionne que bien lorsque les strings code> dans la liste sont triés, comme vous l'avez fourni dans l'échantillon d'entrée. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="ulList">
<li>1</li>
<li>1</li>
<li>1</li>
<li>2</li>
<li>2</li>
<li>3</li>
<li>3</li>
<li>3</li>
<li>3</li>
</ul>
Si la liste est garantie pour être triée, cela fonctionnera bien.
$("ul li").each(function(){
if ($(this).prev("li").html() != $(this).html()){
$(this).addClass("first");
}
});
Demo:
https://codepen.io/seyyedmojtaba72/pen/qGgRxG
J'ai essayé de faire un exemple simple:
p>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>1</li>
<li>1</li>
<li>1</li>
<li>2</li>
<li>2</li>
<li>3</li>
<li>3</li>
<li>3</li>
<li>3</li>
</ul> Vous pouvez utiliser alors, utilisez p> mapper () code> + obtenir () code> pour renvoyer un tableau des éléments 'html. [... Nouveau ensemble (tableau)]] code> pour le filtrer uniquement sur les éléments uniques. p> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>1</li>
<li>1</li>
<li>1</li>
<li>2</li>
<li>2</li>
<li>3</li>
<li>3</li>
<li>3</li>
<li>3</li>
</ul>
Vous voudrez vérifier la compatibilité du navigateur avant d'utiliser ... code> et définir code>.
@jnylen non sûr si cela est dirigé vers moi ou sur OP. OP n'a pas spécifié les contraintes de navigateur et donc je ne pense donc pas qu'il est utile de blaguer de manière préemptive ma réponse à la compatibilité Internet Explorer. Bien qu'ils puissent choisir de ne pas l'utiliser si c'est le cas.
Hmm .. Qu'est-ce qui devrait être sur le résultat? L'élément de noeud pour cet élément code>? Ou juste les valeurs de nœud (c'est-à-dire une matrice comme [1, 2, 3])?
L'élément de noeud
Meilleure façon dont vous pourriez probablement faire cela est une itération à travers des nœuds et un tableau de innerhtmls stockés
Dupliqué possible de jQuery: supprimer des éléments en double?
Il n'y a pas une fonction intégrée dans JQuery pour cela. Vous devriez probablement redéfinir la partie qui construit ce HTML si vous le pouvez.