2009-09-16 23 views
24

Devo selezionare un elemento basato sul suo testo in jQuery.jQuery select basato sul testo

Per esempio:

<span>this text</span> 

So che posso usare .contains() per selezionare in base al testo, ma non è esclusiva.

Non voglio per selezionare:

<span>this text and that text</span> 

voglio selezionare l'elemento se è l'unico testo dell'elemento.

Oltre all'uso della regex, come posso fare questo con i selettori jQuery?

Grazie.

risposta

34

Hai un po 'di leva con il: contiene selettore, ma questo va solo lontano. Avrete bisogno di tagliare più in basso l'insieme di elementi sulla base di corrispondenze testo esatto, come in:

$("span:contains(this text)") 
.filter 
(
    function() 
    { 
    return $(this).text() === "this text"; 
    } 
) 

Questo rende l'iniziale contiene utilizzo tecnicamente inutile, ma è possibile riscontrare vantaggi di prestazioni da partire con una piccola collezione di elementi SPAN prima di filtrare verso il basso per il set esatto che ti interessa

EDIT:. Ha preso il suggerimento di Ken Browning per utilizzare la funzione invece di innerHTMLtext() per il confronto stringa all'interno della funzione filter. L'idea è che innerHTML catturerà il testo che non ci interessa particolarmente (incluso il markup).

+4

Buona risposta, ma perché usare 'innerHTML' invece di' $ (this) .text() '? Non usare 'innerHTML' gli richiede di tenere conto dei casi in cui i criteri includono caratteri che devono essere codificati (come & -> &) –

+0

Per il pignolo, ti ho dato +1 e un rinvio nella risposta! –

+0

@DavidAndres Invece di 'innerHTML' potresti anche usare' innerText' che è più veloce di '.text()' e non includerebbe markup. – hitautodestruct