2012-11-19 5 views
5

Hey, ich lade eine HTML-Seite mit Ajax in eine Zeichenfolge, jetzt möchte ich den Titel der Seite finden und verwenden.Wie Title-Tag in einer Zeichenfolge von HTML erhalten?

Jetzt habe ich es geschafft, die <title> mit Regex zu bekommen, aber das gibt das Tag zusammen mit dem Titel selbst und ich möchte das aus der Zeichenfolge extrahieren oder könnte es eine Möglichkeit, das in der Regex zu tun?

Dies ist mein Code:

var title = result.match(/<title[^>]*>([^<]+)<\/title>/); 

Nun, wie ich tue das actuall Titel nach diesem/statt dessen bekommen?

+0

Verwenden Sie jquery, um das Title-Tag auszuwählen ... Verwenden Sie keine Regex. – nhahtdh

+0

Es ist in einem String nicht im Dokument –

+1

Ich bin mir dessen bewusst, aber ich habe Lösung gesehen, die den HTML-String analysiert und auf ihm arbeitet. BEARBEITEN: Gefunden http://stackoverflow.com/questions/704679/parse-html-string-with-jquery – nhahtdh

Antwort

9

laden Sie Ihre Antwort HTML-String in ein jQuery-Objekt wie so und rufen Sie den Text

$(response).find("title").text(); 
+0

Das Dokument ist eine Antwort auf eine Ajax-Anfrage. Daher kann es nicht über document.title – devsathish

+0

Guter Punkt zugänglich sein. Ich habe das von meiner Antwort entfernt. – Bruno

+1

Dies funktionierte für mich aus irgendeinem Grund nicht (jQuery 1.9.1), ich musste die Antwort in ein div schreiben und diese stattdessen in ein jQuery-Objekt laden: 'var div = document.createElement ('div'); div.innerHTML = Antwort; $ (div) .find ('title'). text(); ' –

9

.match() kehrt Array von Übereinstimmungen verwenden

var title = result.match(/<title[^>]*>([^<]+)<\/title>/)[1]; 

Wert erhalten in Klammern

+0

Danke ivan das hat funktioniert. Aber gibt es einen besseren Weg, um das Title-Tag zu bekommen? –

+0

Wenn Sie mit HTML als String arbeiten, können Sie '/ (. *?)/i' regexp verwenden. Wenn Sie jquery verwenden, können Sie ein Dokumentfragment erstellen und daraus einen Wert auswählen '$ (yourHtmlString) .find ('title'). text()' –

2

Code:

var title = result.match("<title>(.*?)</title>")[1]; 
0

Machen Sie die reg exp nicht zwischen Groß- und Kleinschreibung. Hier ist der vollständige Code:

var regex = /<title>(.*?)<\/title>/gi; 
var input = "<html><head><title>Hello World</title></head>...</html>"; 
if(regex.test(input)) { 
    var matches = input.match(regex); 
    for(var match in matches) { 
    alert(matches[match]); 
    } 
} else { 
    alert("No matches found!"); 
} 
2

Eine relativ einfache Klar JavaScript und ohne reguläre Ausdrücke, Ansatz:

var htmlString = '<head><title>Some title</title></head><body><p>Some text, in a paragraph!</p></body>', 
    html = document.createElement('html'), 
    frag = document.createDocumentFragment(); 
html.innerHTML = htmlString; 
frag.appendChild(html); 

var titleText = frag.firstChild.getElementsByTagName('title')[0].textContent || frag.firstChild.getElementsByTagName('title')[0].innerText; 

console.log(titleText);​ 

JS Fiddle demo.

Ich musste natürlich Ihre HTML-Zeichenfolge erraten und entfernte die (vermutlich vorhandenen) umschließenden /</html> Tags aus dem Inhalt. Aber auch wenn diese Tags in der Zeichenfolge sind, funktioniert es immer noch: JS Fiddle demo.

Und ein etwas funktionalen Ansatz:

function textFromHTMLString(html, target) { 
    if (!html || !target) { 
     return false; 
    } 
    else { 
     var fragment = document.createDocumentFragment(), 
      container = document.createElement('div'); 
     container.innerHTML = html; 
     fragment.appendChild(container); 
     var targets = fragment.firstChild.getElementsByTagName(target), 
      result = []; 

     for (var i = 0, len = targets.length; i<len; i++) { 
      result.push(targets[i].textContent || targets[i].innerText); 
     } 
     return result;   
    } 
} 

var htmlString = '<html><head><title>Some title</title></head><body><p>Some text, in a paragraph!</p></body></html>'; 

var titleText = textFromHTMLString(htmlString, 'title'); 

console.log(titleText);​ 

JS Fiddle demo.

+0

Erstaunliche Antwort, keine Regex !!! Ich habe mir mit Teilstrings und Längen den Kopf geschlagen, um erste, zweite, dritte 'img' -Tags aus einer HTML-Zeichenfolge zu extrahieren. Das ist jetzt so einfach !!! – denikov

Verwandte Themen