2009-12-30 9 views
5

Es ist wahrscheinlich etwas wirklich einfaches, aber ich lerne gerade.Javascript Suche nach Tag und es ist innerHTML

Es gibt eine Seite mit 3 blockquote Tags, und ich müsste die innerHTML des einen mit einer bestimmten Zeichenfolge erhalten. Ich weiß nicht, wie man eine Zeichenkette sucht und vergleicht und die innerHTML des Etiketts erhält, das das übereinstimmende Resultat enthält.

Jede Hilfe wäre willkommen!

Antwort

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; 
    } 
} 

:)

Übrigens würde es viel geben schönere Methode, wenn Sie Prorotype JS verwendet werden würden (was viel besser als jQuery btw ist):

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

Sie könnten natürlich auch reguläre Ausdrücke verwenden, um die Zeichenfolge zu finden, die nützlichen (Verwendung el.match sein könnte () dafür).

+0

Dies entspricht nur dem Element, das innerHTML ist genau wie searchString, und das ist nicht was er will (warum würden Sie danach suchen, wenn Sie bereits die Zeichenfolge haben)? –

+0

Whoops ja, sieht aus wie ich gescheitert bin: D. Ich werde es korrigieren. – watain

+0

Du gibst im letzten Beispiel nur wahr/falsch zurück :) –

2

Zuweisen einer ID zu den Blockquote Elemente, dann können Sie die Innerhtml wie diese:

HTML:

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

JS:

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

Es ist nicht meine Seite, ich kann keine ID zuweisen, aber danke für die Antwort sowieso! :) –

5

Wenn Sie durch jeden <blockquote> auf der Seite suchen müssen, versuchen Sie dies:

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

Aus irgendeinem Grund konnte ich dies nicht zum Funktionieren bringen (auch nach dem Ersetzen des letzten}) –

2

Vorsicht innerHTML Verwendung für Text innerhalb eines Tags zu suchen, wie auch für den Text in Attributen oder Tags suchen als Gut.

können Sie finden alle Elemente mit:

var elems = document.getElementsByTagName("blockquote") 

können Sie dann schauen durch ihre innerHTML, aber ich würde empfehlen, anstatt durch die ihre textContent/innerText (leider ist dies nicht über Browser standardisiert, wie es scheint):

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