Teil eines HREF-Attributs mit jQuery und Regular Expressions abändern?

josDesign

Erfahrenes Mitglied
Hallo liebe Community,

Da ich leider noch nicht so fit bin mit der Materie, jedoch schon lange versucht habe eine Lösung zu finden wende ich mich an das Forum :-)

Ich versuche Links auf der Homepage mit Javascript abzuändern. Mein bisheriger Versuch sieht folgendermaßen aus:

Mein Ziel:
Code:
// Alle Links die mit:

http://www.domain.at/index.php?id=40&tx_josdesign_pi1[category]...

// beginnen sollen mit jQuery folgenderweise abgeändert werden

http://www.domain.at/index.php?id=33&tx_josdesign_pi1[category]...

// ich muss also mit jQuery Selektor alle Links selektieren, welche tx_josdesign_pi1 enthalten

Meine bisherigen Vorgehensweisen ohne Erfolg:
Code:
$("#col2 a[href^='index.php?id=40&tx_josdesign_pi1']")
	.each(function(){ 
		this.href = this.href.replace(/^http:\/\/www\.domain\.at\/index\.php?id=33&tx_josdesign_pi1, 
		"http://www.domain.at/index.php?id=40&tx_josdesign_pi1");
	});

Ich möchte also Links welche "tx_josdesign_pi1" als Parameter enthalten (egal wo im href) mit Regular Expressions bearbeiten können, sodass ich dann in diesem Fall den Paramter "id=40" auf "id=33" umändern kann.

Wie man sieht kenne ich mich nur spärlich aus mit dem Selektieren mit Attributen in jQuery sowie Regular Expressions... Vielleicht hat jemand für mich ein oder mehrere Tipps?

Mit bestem Dank im Voraus,
jos
 
Zuletzt bearbeitet:
Funktioniert es so?

Javascript:
$("a[href*=tx_josdesign_pi1]").each(function() {
	this.href = this.href.replace(/([&?])id=40([^0-9]|$)/, "$1id=30$2");
});

Kurze Eklärung:
Der Selektor "*=" findet alle Elemente deren Attribut den folgenden String irgendwo enthält.

Jetzt zum regulären Ausdruck:
1.
Code:
//Vor "id" muss eine Fragezeichen oder ein Kaufmanns-Und stehen. Sonst würde ja auch "foobarid" gefunden.
([&?])

2.
Code:
//Genau danach suchen wir. Nur Grenzen wir es etwas ein um "foobarid=40123" nicht auch zu treffen
id=40

3.
Code:
//Nach "id=40" kommt entweder mindestens einmal KEINE ZAHL oder das Stringende.
([^0-9]|$)

1. und 3. sind jeweils geklammert um bei der Ersetzung per Backreference ("$1" und "$2") wiederrum darauf zurückzugreifen.
 
Vielen lieben Dank für deine Hilfe!

Ich habs jetzt dann so gelöst, ich musst noch die aktuelle ID ebenso auslesen :)

Code:
// jQuery's noConflict mode is used instead of the $
var J = jQuery.noConflict();

jQuery(document).ready(function()
{	
	//------------------------------------------------------------------
	/* josdesign_pi1 hrefanpassungen */
		// id attribut aus body auslesen
	var pageId = document.getElementsByTagName("body").item(0).getAttribute("id");
		// ausgelesenen string bereinigen (page-uid) wegmachen
	pageId = pageId.replace("page-uid", "");
	/* console.log("Page Id: " + pageId);
	console.log("Body elements: " + document.getElementsByTagName("body")); */
		// regularexpression string zusammenbasteln
	var regEx = "([&?])id=" + pageId + "([^0-9]|$)";
		// regEx erstellen aus dem regex-string von vorhin
	myRegEx = new RegExp(regEx);
	J("#col2 .josdesign_category_area a[href*=tx_josdesign_pi1]").each(function() {
    		// replacen des gewünschten contents
		this.href = this.href.replace(myRegEx, "$1id=21$2");
	});

});


Herzlichen Dank, mit deiner Hilfe hab ich es dann geschafft!! Danke auch für die ausführliche Erklärung, die ich wirklich notwendig hatte ;)

lg
jos
 
Zurück