2011-01-03 10 views
7

Ho una variabile che contiene del testo, qualche html, in pratica può essere una stringa. Ho bisogno di cercare la variabile per una stringa specifica per elaborare diversamente quella variabile se è contenuta. Ecco un frammento di quello che sto cercando di fare, non funziona, ovviamente :)jQuery Cerca testo in una variabile?

$.each(data.results, 
    function(i, results) { 
    var text = this.text     
    var pattern = new RegExp("^[SEARCHTERM]$"); 
    if(pattern.test(text)) 
    alert(text); //was hoping this would alert the SEARCHTERM if found... 
+0

cosa si dice quando si esegue un 'alert (this.text) '? – ajreal

risposta

9

Si potrebbe utilizzare .indexOf() invece per eseguire la ricerca.

Se la stringa non viene trovata, restituisce -1. Se viene trovato, restituisce l'indice primo a zero in cui si trovava.

var text = this.text; 
var term = "SEARCHTERM"; 

if(text.indexOf(term) != -1) 
    alert(term); 

Se speravate una corrispondenza esatta, che l'utilizzo del ^ e $ sembra implicare, si può solo fare un confronto ===.

var text = this.text; 
var term = "SEARCHTERM"; 

if(text === term) 
    alert(term); 

EDIT: Sulla base di un commento, si desidera una corrispondenza esatta, ma === non funziona, mentre indexOf() è. Questo a volte succede se ci sono degli spazi bianchi che devono essere tagliati.

Provare a ritagliare lo spazio vuoto utilizzando jQuery's jQuery.trim() method.

var text = $.trim(this.text); 
var term = "SEARCHTERM"; 

if(text === term) 
    alert(term); 

Se questo non funziona, mi consiglia di registrazione this.text alla console per vedere se è il valore che ci si aspetta.

+0

Grazie, quindi sto cercando una corrispondenza esatta con il termine di ricerca, ma il confronto === non sembra funzionare. L'uso di indexOf, tuttavia, lo fa. Perché dovrebbe essere? – thatryan

+0

@thatryan: Dipenderà dal valore di 'this.text'. Senza sapere cosa 'data.results' regge, non posso dirlo con certezza, ma suppongo che forse ci siano degli spazi bianchi che devono essere tagliati.'IndexOf()' localizzerà qualsiasi corrispondenza parziale nella stringa, quindi a volte potrebbe dare dei falsi positivi, mentre '===' fallirà se c'è qualche differenza, compresi gli spazi bianchi. Ho aggiornato la mia risposta. – user113716

+0

@thatryan: hai risolto questo problema? – user113716

2

Se si utilizza un'espressione regolare per cercare una stringa, è possibile trovare la partita in questo modo:

var match = text.match(pattern); 
if(match) { 
    alert(match[0]); 
} 

Vedere la documentazione per .match() per ulteriori informazioni.

Si noti che se si sta tentando di cercare la stringa "[SEARCHTERM]" (un termine di ricerca contenente parentesi), il metodo di ricerca non funzionerà perché le parentesi hanno un significato speciale all'interno delle espressioni regolari. Invece, utilizzare .indexOf():

var index = text.indexOf("[SEARCHTERM]"); 
if(index != -1) { 
    alert("Search term found"); 
} 

Tuttavia, se si sta solo cercando di trovare una corrispondenza esatta (altro che il termine di ricerca è nella stringa si sta verificando), si dovrebbe confrontare le stringhe:

if(text == "[SEARCHTERM]") { 
    alert("Search term found"); 
} 
0

Che cosa significa "non funziona" significa qui?

Tenere presente che è necessario utilizzare le parentesi graffe ({}) con le dichiarazioni if. Alcuni browser ti permetteranno di perderli ma dovresti includerli per essere corretti e supportare tutto.

+0

Oh, e manchi un punto e virgola sulla linea in cui si inizializza la variabile 'test'. –

+0

* "Alcuni browser ti permetteranno ..." * Escluderli è in realtà consentito dalle specifiche della lingua, ma certamente è una buona pratica includerli. – user113716

+1

@patrick dw: Ah, oops! Grazie per quello. Ammetto che ho sempre pensato; ancora, i browser diffusi come IE6 non saranno felici con esso IME, quindi è meglio tenerli dentro. –