Hallo Rolf,
this
ist in JavaScript ganz grob gesagt der aktuelle Kontext, in dem eine Funktion oder Methode läuft. Aber: Man hat beim Aufrufen einer Funktion durchaus Möglichkeiten, diesen Kontext zu manipulieren. Und das tut jQuery, wenn es einen Eventhandler aufruft. Es sorgt dafür, dass Du in this das Objekt für das HTML Element findest, auf dem der Eventhandler registriert wurde. Und weil Du den click-Handler auf dem Link definierst, ist das das HTML Elementobjekt zum geklickten Link. Also:this
ist der Link.
Ja, das stimmt. Habe ich dann auch gemerkt, kurz nachdem ich den Murks verfasst habe. War nur zu spät zum Editieren.
this
ist der Link, undthis.href
ist die verlinkte URL. Und genau hier bin ich böse reingefallen - du darfst mir die Ohrfeige nun gerne zurückgeben.
🙂
Es gibt einen Unterschied zwischen dem href Attribut und der href-Eigenschaft des Link-Objekts. Das href Attribut steht für den Text, der im HTML steht. Und die href-Eigenschaft ist das, wie der Browser dieses Attribut deutet. Das habe ich übersehen; ich dachte, in der href-Eigenschaft stünde der Attributinhalt. Aber nein - da steht bereits die vollständig aufbereitete URL, auf die der Link verweist.
Danke für die Klarstellung. Jetzt habe ich es verstanden.
Deswegen ist this.href für den pushState okay. Aber für das Bauen der Ajax-URL steht schon zu viel drin, deswegen ist es da ganz sinnvoll, wenn Du mit $(this).attr("href") den Attributinhalt ausliest.
Doch nicht so dumm!
Nein, tu das nicht. Die URLs ohne "subpages" drin sind die, die der Browser für den Erstabruf der Seite braucht. Die werden von htaccess in index.php?page=... umgesetzt.
Die URL mit "subpages" sind die, mit denen Du den reinen Inhalt der Subpage bekommst und die Du für Ajax brauchst - das sind zwei verschiedene Dinge.
Also lasse ich die .htaccess so, wie sie ist?
Ups? Noch ein Hirnschaden von mir? Ich hätte erwartet, dass der Browser dann diese URL abruft. Um zu sehen, was da genau passiert, müsste ich deinen Stand online sehen - geht das? Ich mag es nicht nicht nachprogrammieren. Im Moment scheint bei Dir was eine Endlosschleife zu drehen - entweder der Hoster oder deine Seite. Direkte Aufrufe auf /subpages Seiten gehen, aber Aufrufe über die index.php bleiben hängen.
Na klar, ich habe die Webseite aktualisiert
http://54598532.swh.strato-hosting.eu/games/demons-souls/
Wie du siehst, funktioniert nun sogar das Hervorheben des aktiven Tabs.
<nav id="tabs">
<a class="tab <?= $current == null || $current == 'game' ? 'current' : ''; ?>" href="game">Spiel</a>
<a class="tab <?= $current == 'releases' ? 'current' : ''; ?>" href="releases">Releases</a>
<a class="tab <?= $current == 'merchandise' ? 'current' : ''; ?>" href="merchandise">Merchandise</a>
<a class="tab <?= $current == 'guides' ? 'current' : ''; ?>" href="guides">Guides</a>
<a class="tab <?= $current == 'emulation' ? 'current' : ''; ?>" href="emulation">Emulation</a>
<a class="tab <?= $current == 'mods' ? 'current' : ''; ?>" href="mods">Mods</a>
<a class="tab <?= $current == 'savegame' ? 'current' : ''; ?>" href="savegame">Savegame</a>
</nav>
Kurz vorher explodiert noch die aktuelle URL …
<?php
$url = htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES, 'UTF-8');
$urlParts = explode('/', $url);
$current = $urlParts[count($urlParts)-1];
?>
Ich weiß nicht, ob das eine gute Lösung ist, aber es ist eine Lösung.
Boris