2009-12-30 6 views
5

Probabilmente è qualcosa di veramente semplice, ma sto solo imparando.Javascript search per tag e get it's innerHTML

C'è una pagina con 3 tag blockquote e ho bisogno di ottenere il innerHTML di quello contenente una determinata stringa. Non so come cercare/abbinare una stringa e ottenere il innerHTML del tag contenente il risultato corrispondente.

Qualsiasi aiuto sarebbe apprezzato!

risposta

7
var searchString = 'The stuff in innerHTML'; 
var elements = document.getElementsByTagName('blockquote') 
for (var i = 0; i < elements.length; i++) { 
    if (elements[i].innerHTML.indexOf(searchString) !== -1) { 
     alert('Match'); 
     break; 
    } 
} 

:)

Ci sarebbe stato molto il metodo più bello se si desidera utilizzare Prorotype JS (che è molto meglio di jQuery btw):

var el = $$('blockquote').find(function(el) { 
    return el.innerHTML.indexOf('The string you are looking for.') !== -1; 
}); 

Si potrebbe naturalmente anche usare espressioni regolari per trovare la stringa, che potrebbe essere più utile (uso el.match () per quello).

+0

Questo corrisponderà solo all'elemento che innerHTML è esattamente come searchString, e che non è quello che vuole (perché dovresti cercarlo allora, se hai già la stringa)? –

+0

Whoops si, sembra che io abbia fallito: D. Andando a correggerlo. – watain

+0

Hai appena restituito true/false nell'ultimo esempio :) –

2

Assegnare un id agli elementi BLOCKQUOTE allora si può ottenere l'innerHTML in questo modo:

HTML:

<blockquote id="bq1">Foo</blockquote> 

JS:

var quote1 = document.getElementById('bq1').innerHTML; 
+1

Non è la mia pagina, non posso assegnare un ID, ma grazie per la risposta comunque! :) –

5

Se è necessario per la ricerca in ogni <blockquote> sulla pagina, provate questo:

function findBlockquoteContainingHtml(matchString) { 
    var blockquoteElements = document.getElementsByTagName('BLOCKQUOTE'); 
    var i; 
    for (i = 0; i < blockquoteElements.length; i++) { 
     if (blockquoteElements[i].innerHTML.indexOf(matchString) >= 0) { 
      return blockquoteElements[i].innerHTML; 
     } 
    } 
    return null; 
} 
+0

Per qualche motivo non sono riuscito a farlo funzionare (anche dopo aver sostituito l'ultimo}) –

2

Fare attenzione usando innerHTML per la ricerca di testo all'interno di un tag, che potrebbero anche cercare testo in attributi o tag come bene.

Potete trovare tutti i elementi utilizzando:

var elems = document.getElementsByTagName("blockquote") 

È quindi possibile guardare attraverso il loro innerHTML, ma mi sento di raccomandare invece guardando attraverso la loro textContent/innerText (purtroppo, questo non è standardizzato attraverso il browser, sembra):

for (i in elems) { 
    var text = elems[i].textContent || elems[i].innerText; 
    if (text.match(/foo/)) { 
    alert(elems[i].innerHTML); 
    } 
}