-1
votes

Comment obtenir une première instance de chaque chaîne?

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 commentaires

Hmm .. Qu'est-ce qui devrait être sur le résultat? L'élément de noeud pour cet élément

  • ? 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.


  • 5 Réponses :


    2
    votes

    Une option utilise un objet SET code> pour suivre le

  • code>. Utilisez le filtre code> pour obtenir tous tous les objets
  • code> objets introuvables sur définir code> objet.

    p>

    <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>

  • 3 commentaires

    Solution géniale. Aimer l'utilisation de l'ensemble <3


    Vous voudrez vérifier la compatibilité du navigateur avant d'utiliser définir . Un moyen plus compatible de faire la même chose est var obj = {} , obj [clé] = true; Pour ajouter quelque chose à l'ensemble, et si ( obj [clé]) pour vérifier l'adhésion.


    Basé sur DOC, l'utilisation de base de définir 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 :)



    1
    votes

    Une solution possible consiste à utiliser .Filter () pour obtenir les éléments dont 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.

    p>

    <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>


    1 commentaires

    Si la liste est garantie pour être triée, cela fonctionnera bien.



    0
    votes
    $("ul li").each(function(){
        if ($(this).prev("li").html() != $(this).html()){
            $(this).addClass("first");
        }
    });
    Demo:
    https://codepen.io/seyyedmojtaba72/pen/qGgRxG

    0 commentaires

    0
    votes

    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>


    0 commentaires

    1
    votes

    Vous pouvez utiliser mapper () code> + obtenir () code> pour renvoyer un tableau des éléments 'html.

    alors, utilisez [... Nouveau ensemble (tableau)]] code> pour le filtrer uniquement sur les éléments uniques. p>

    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>


    2 commentaires

    Vous voudrez vérifier la compatibilité du navigateur avant d'utiliser ... et définir .


    @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.