jQuery: Enthält einen Selektor zum Suchen nach mehreren Zeichenfolgen

Lesezeit: 4 Minuten

jQuery Enthalt einen Selektor zum Suchen nach mehreren Zeichenfolgen
zıəs uɐɟəʇs

Angenommen ich habe:

<li id="1">Mary</li>
<li id="2">John, Mary, Dave</li>
<li id="3">John, Dave, Mary</li>
<li id="4">John</li>

Wenn ich alle

  • Elemente finden muss, die „John“ und „Mary“ enthalten, wie würde ich die jQuery erstellen?

    Eine Suche nach einer einzelnen Zeichenfolge scheint einfach:

    $('li:contains("John")').text()
    

    Ich suche so etwas wie den folgenden Pseudocode:

    $('li:contains("John")' && 'li:contains("Mary")').text()
    

    Danke!

    1643686868 424 jQuery Enthalt einen Selektor zum Suchen nach mehreren Zeichenfolgen
    Adam Kuss

    Antworten

    Finden li, die einen Text enthalten, der BEIDE Mary enthält UND John:

    $('li:contains("Mary"):contains("John")')
    

    Finden li, deren Text ENTWEDER Mary enthält ODER John:

    $('li:contains("Mary"), li:contains("John")')
    

    Erläuterung

    Denken Sie nur an die :contains als ob es eine Klassendeklaration wäre, wie .class:

    $('li.one.two').      // Find <li>'s with classes of BOTH one AND two
    $('li.one, li.two').  // Find <li>'s with a class of EITHER one OR two
    

    Genauso ist es mit :contains:

    $('li:contains("Mary"):contains("John")').      // Both Mary AND John
    $('li:contains("Mary"), li:contains("John")').  // Either Mary OR John
    

    Demo

    http://jsbin.com/ejuzi/edit

    • Wie könnte ich die Inhalte ausspucken, wenn ich die Strings in einem Array habe? Das Array wird aus Kontrollkästchenwerten erstellt, sodass es nicht jedes Mal eine Standardlänge hat?

      – jeynon

      19. August 2020 um 21:03 Uhr

    Wie wäre es mit

    $('li:contains("John"),li:contains("Mary")')
    

    • Und jQuery indiziert nicht einmal etwas zweimal. Es gibt also einen automatischen Filter und die Antwort von Lazarus findet wirklich vier Elemente.

      – Paulus

      10. März 10 um 12:42 Uhr

    • Danke, das war, was ich gehofft hatte, würde funktionieren, aber es funktioniert nicht. Dieser Selektor gibt keine Ergebnisse zurück. Ich habe es schnell versucht mit: $(‘li:contains(“John”)’,’li:contains(“Mary”)’).text() und alles, was ich zurückbekam, war “”. Sogar $(‘li:contains(“John”)’,’li:contains(“Mary”)’).css(‘font-color’,’red’) schien nicht zu funktionieren.

      – zıəs uɐɟəʇs

      10. März ’10 um 12:45 Uhr


    • Ich denke, Sie fügen eine ein ' zwischen den beiden li:contains.

      – rahul

      10. März 10 um 12:46 Uhr

    • Selbst wenn ich die falsche Syntax, die ich in meinen oben erwähnten Tests hatte, korrigiert habe, werden dadurch immer noch alle

    • -Elemente ausgewählt. $(‘li:contains(“John”),li:contains(“Mary”)’).css(‘color’,’red’) Und das (einfache Anführungszeichen trennen die Selektoren): $(‘li:contains( “John”)’,’li:contains(“Mary”)’).css(‘color’,’red’) wählt überhaupt nichts aus.

      – zıəs uɐɟəʇs

      10. März 10 um 12:52 Uhr

  • Ah … Ich verstehe, was du meinst, du willst nur LI, die hat beide Textteile … hmmmm … darüber muss ich nachdenken.

    – Lazarus

    10. März 10 um 13:03 Uhr

  • jQuery Enthalt einen Selektor zum Suchen nach mehreren Zeichenfolgen
    Kristof

    Antworten

    Die korrekte Syntax wäre $("li:contains('John'),li:contains('Mary')").css("color","red")

    Aber ich habe herausgefunden, dass jQuery sehr schlecht abschneidet, wenn Sie viele Fälle testen müssen (besonders auf IE6, ich weiß, es ist alt, aber immer noch in Gebrauch). Also beschloss ich, meinen eigenen Attributfilter zu schreiben.

    So verwenden Sie es: $("li:mcontains('John','Mary')").css("color","red")

    Code

    jQuery.expr[':'].mcontains = function(obj, index, meta, stack){
        result = false;     
        theList = meta[3].split("','");
    
        var contents = (obj.textContent || obj.innerText || jQuery(obj).text() || '')
    
        for (x=0;x<theList.length;x++) {
            if (contents.indexOf(theList[x]) >= 0) {
                return true;
            }
        }
    
        return false;
    };
    

    • hinzufügen .toLowerCase() zu contents und theList[x] um diesen Fall unsensibel zu machen.

      – Eonasdan

      25. September 2012 um 16:00 Uhr

    • Wie würdest du Groß- und Kleinschreibung beachten?

      – Computertyp

      23. Juni 15 um 11:26 Uhr

    • Danke – das wollte ich in Chrome : Aber es hat mich ein bisschen verrückt gemacht, bei drei Einträgen würde es nur mit dem mittleren übereinstimmen: $("li:mcontains('John', 'Ringo', 'Mary')").css("color","red"); Nach ein wenig Debuggen fand ich ` theList = meta[3].split(“‘,'”);` a) Ich habe ‘,‘ verwendet, um das Leerzeichen zu entfernen, z erster und letzter Eintrag) Dann: $("li:mcontains(John', 'Ringo', 'Mary)").css("color","red"); funktionierte!! Ich bin froh, darauf hingewiesen zu werden, was ich falsch mache – aber das war, was ich gefunden habe

      – Mark O’Donohue

      29. Juni 17 um 4:10 Uhr

    1643686869 420 jQuery Enthalt einen Selektor zum Suchen nach mehreren Zeichenfolgen
    Slava

    Es ist einfach:

    $("li:contains('John'):contains('Mary')")
    

    .

    722350cookie-checkjQuery: Enthält einen Selektor zum Suchen nach mehreren Zeichenfolgen

    This website is using cookies to improve the user-friendliness. You agree by using the website further.

    Privacy policy