2011-10-12 14 views
6

Ho bisogno di trovare sulla pagina HTML tutti i frammenti di testo che corrispondono all'espressione regolare specifica (ovvero, devo ignorare i tag in modo che '< span>First name: < /span>< br/>< b>John< /b>' corrispondano a 'First name: John') e di evidenziare questi frammenti trovati (di decorare con nuovi elementi e applicare stili di css personalizzati) ed essere in grado di localizzare questi frammenti, ad es essere in grado di scorrere questi in vista. La funzionalità è simile a ciò che il plug-in del browser Skype sta facendo con i numeri di telefono trovati sulla pagina.Trova elemento DOM che contiene stringhe che corrispondono all'espressione regolare

+7

Avete un codice che non funziona o è una domanda "darmi il codice"? Che cosa hai provato? – CanSpice

+0

Ho bisogno di trovare un approccio, posso fare il codice. Se è già risolto e il codice è disponibile, anche meglio. –

+0

Sembra che jQuery possa farlo con: contiene() selettore. forse la sua logica può essere ridefinita per usare la ricerca regexp invece della ricerca di sottostringa. –

risposta

-1

Hai provato qualcosa del genere?

document.body.innerHTML.replace(/<\/?[^>]+>/g, '')

+1

Ciò non solo distruggerà ogni listener che è stato aggiunto dinamicamente, ma probabilmente rovinerà elementi, attributi e proprietà in diversi modi in diversi browser per qualsiasi pagina con contenuti non banali. – RobG

+0

Ho bisogno di mantenere informazioni su dove nel DOM si trovano i risultati della mia ricerca, o posso document.body.innerText.match() - non è quello che mi serve. –

2

È possibile sia in modo ricorsivo camminare lungo il DOM guardando il textContent o innerText proprietà (a seconda dei casi) di elementi, oppure è possibile utilizzare un loop all'interno di raccolta restituita da getElementsByTagName. In entrambi i casi, una volta identificato il testo e l'elemento genitore, è necessario capire come sostituirlo.

Quali sono i requisiti per la struttura del documento nella sostituzione se la stringa è suddivisa su uno o più elementi?

+0

Direi che l'utilizzo di un approccio incentrato sul nodo rispetto a uno incentrato su stringhe porterà a una maggiore portabilità. Inoltre, questo è l'aspetto del DOM che la maggior parte delle persone ha problemi con :). –

+0

Sì, ma l'OP vuole la stringa anche se è divisa su più di un elemento, quindi solo guardare i nodi di testo non farà il lavoro. Non so come intende trattare con le stringhe divise, ma almeno il metodo sopra troverà l'antenato più vicino che ha l'intera stringa. – RobG

2

Si potrebbe utilizzare jQuery selectors per ottenere i <b> tag contenenti John che vengono dopo un tag <span> che contiene First name:, e poi per esempio applicare uno stile:

$("span:contains('First name:') ~ b:contains('John')").css('color','red'); 

Ecco un esempio di esecuzione: http://jsfiddle.net/XzwNj/

+0

Era solo un esempio, non caso specifico –

Problemi correlati