Javascript code funktioniert nicht wie erwartet?

... komplette Frage anzeigen

2 Antworten

Ich würde es machen, ohne neue Fenster zu öffnen. Das geht mit Ajax und jQuery einfacher und kompakter, z.B. so (hab ich einfach runtergeschrieben und nicht getestet, könnten Fehler drin sein):

$('.work').map(function () {
var that = this;
$.get($(that).attr('href'), function (data) {
if ($(data).find('.following').length > 0) {
$(that).hide();
}
});
});

Was ich in deinem Code gar nicht verstehe ist der Teil

if (following !== null ) { document.getElementById(i + 1).style.visibility = "hidden"; }

worauf soll denn "document.getElementById(i + 1)" zeigen? Reine Zahlen als id für ein Element gehen gar nicht.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Coon0spell
06.10.2016, 00:06

Hi, danke für deine Antwort. Klappt leider noch nicht :'(

Auf der Rankingseite steht "<section id="1" ...>" deswegen das hochzählen der Variable für die ID.

1

Deine Vorgehensweise ist viel zu umständlich.

Ich vermute zuerst einmal, dass es sich um externe Links handelt. Sollten es interne Links sein, könntest du sie serverseitig nach jedem Request mit einer CSS-Klasse ausstatten. So aber würde ich dem Link-Element lediglich einen Click-Handler zuweisen (https://wiki.selfhtml.org/wiki/HTML/Eventhandler), der dem Link die passende CSS-Klasse oder den CSS-Style zuweist.

Mit jQuery könntest du es noch vereinfachen und die Funktion hide verwenden (http://api.jquery.com/hide/).

Bewusst sollte dir allerdings sein, dass nach jedem Request alle Links wieder angezeigt werden. Soll dem nicht so sein, musst du die Daten entweder in einem Cookie speichern oder besser die Angelegenheit serverseitig lösen.

PS.: Einen Timer gibt es in JavaScript auch: http://www.w3schools.com/jsref/met\_win\_settimeout.asp. In dem Fall wäre aber wieder ein Event die richtige Wahl: onload (https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload).


Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von regex9
05.10.2016, 21:34

Hmn, Nachtrag, da ich das vielleicht noch falsch verstanden haben könnte.

Wenn der Link nicht auch das Following der Person auslösen sollte, sondern dies erst auf der folgenden Seite bewerkstelligt werden kann, ist doch eine andere Lösung vonnöten.

In erster Linie solltest du dann direkt mit der Schnittstelle der Zielseite kommunizieren, die das Following verwaltet. Bei Twitter wäre das bspw. die Twitter API, der du einen AJAX-Request schicken kannst. Dazu benötigst du allerdings erst gewisse Daten von dem betreffenden Nutzer (seinen Nutzernamen zum Beispiel). Wie das konkret gemacht wird, kannst du in der jeweiligen Dokumentation nachlesen.

Wenn es keine Schnittstelle gibt, mit der man kommunizieren kann, musst du tatsächlich crawlen. Webscraping würde ich dann aber nicht mit JavaScript praktizieren, sondern serverseitig lösen. Nichtsdestotrotz kannst du auch mit dem jQuery-Framework an das Markup der anderen Seite kommen: http://stackoverflow.com/questions/680562/can-javascript-read-the-source-of-any-web-page.

Wenn du deine Lösung bevorzugst, musst du das onload-Event des von dir geöffneten Fensters nutzen.

1

Was möchtest Du wissen?