2 Stimmen

Verwendung von jQuery für eine Zeichenkette mit HTML

Ich versuche, ein Feld zu erstellen, das der Facebook-Share-Box ähnelt, in die man eine URL eingeben kann und die dann Daten über die Seite, den Titel, Bilder usw. anzeigt. Ich habe einen serverseitigen Dienst eingerichtet, um die HTML-Daten der Seite als String zu erhalten, und versuche, nur den Seitentitel zu erhalten. Ich habe dies versucht:

function getLinkData(link) {
  link = '/Home/GetStringFromURL?url=' + link;
  $.ajax({
    url: link,
    success: function (data) {
      $('#result').html($(data).find('title').html());
      $('#result').fadeIn('slow');
    }
  });
}

was nicht funktioniert, aber das folgende funktioniert:

$(data).appendTo('#result')
var title = $('#result').find('title').html();
$('#result').html(title);
$('#result').fadeIn('slow');

aber ich möchte nicht den ganzen HTML-Code auf die Seite schreiben, da er in manchen Fällen weiterleitet und alle möglichen unangenehmen Dinge tut. Irgendwelche Ideen? Danke

Ben

3voto

lonesomeday Punkte 224087

Versuchen Sie es mit filter statt find :

$('#result').html($(data).filter('title').html());

2voto

Angiosperm Punkte 454

Um dies mit jQuery zu tun, ist .filter was Sie brauchen (wie lonesomeday darauf hingewiesen):

$("#result").text($(data).filter("title").text());

Allerdings nicht fügen Sie den HTML-Code des fremden Dokuments in Ihre Seite ein. Dadurch wird Ihre Website anfällig für XSS-Angriffe. Wie bereits erwähnt, hängt dies von der innerHTML-Implementierung des Browsers ab und funktioniert daher nicht immer.

Noch besser ist es, die gesamte relevante HTML-Verarbeitung auf dem Server durchzuführen. Wenn Sie nur die relevanten Informationen an Ihr JS senden, wird der Client-Code über Einfacher und schneller. Sie können sichere/gewünschte Tags/Attribute in eine Whitelist aufnehmen, ohne sich Sorgen machen zu müssen, dass gefährliche Inhalte an Ihre Benutzer gesendet werden. Die Verarbeitung des HTML auf dem Server verlangsamt Ihre Website nicht. Ihr Sprache hat bereits ausgezeichnet HTML Parser warum sie nicht nutzen?

0voto

user113716 Punkte 309387

Wenn Sie ein komplettes HTML-Dokument in ein jQuery-Objekt einfügen, wird alles außer dem Inhalt des <body> abgezogen wird.

Wenn Sie nur den Inhalt der Datei <title> können Sie es mit einem einfachen Regex versuchen:

var title = /<title>([^<]+)<\/title>/.exec(dat)[ 1 ];
alert(title);

Oder mit .split() :

var title = dat.split( '<title>' )[1].split( '</title>' )[0];
alert(title);

-1voto

Joeri Hendrickx Punkte 16259

Die Alternative ist, selbst nach dem Titel zu suchen. Glücklicherweise ist es im Gegensatz zu den meisten "Parse your own html"-Fragen sehr einfach, den Titel zu finden, da er keine verschachtelten Elemente zulässt. Suchen Sie in der Zeichenkette nach etwas wie <title>(.*)</title> und Sie sollten bereit sein.

(ja, ja, ja, ich weiß, verwenden Sie nie regex auf html, aber dies ist ein außergewöhnlich einfacher Fall)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X