2012-04-12 10 views
0

Ich möchte eine URL in einem href durch einen Aufruf einer Funktion ersetzen, die die URL enthalten muss.Ersetze eine href durch einen js Funktionsaufruf

Beispiel: Ich habe die folgende Zeichenfolge:

<a href="www.google.com">Google</a> 
some other text 
<a href="www.wikipedia.org">Wikipedia</a> 

Ich möchte wie diese eine Zeichenfolge zurück:

<a href="javascript:anyFunction('www.google.com');">Google</a> 
some other text 
<a href="javascript:anyFunction('www.wikipedia.org')">Wikipedia</a> 

ich einige Möglichkeiten, mit RegEx getestet haben, aber ich bin nicht gut mit RegEx. Hat jemand eine Lösung für mein Problem?

EDIT: Sorry, ich habe vergessen zu schreiben. Ich erstelle eine Appcelator-Anwendung. Ich kann jQuery oder "Dokument" nicht verwenden. Ich denke, der einzige Weg ist eine RegEx.

+0

ahhh. Also, was Sie wirklich wollen, ist nicht die Hilfe mit dem HTML/CSS wie wir es getan haben. Sie suchen nach einem String-Ersatz! Richtig? –

+0

Genau. Entschuldigung für meine schlechte Beschreibung. – MaxiNet

+0

In welcher Sprache verwenden Sie die Regex? Javascript? PHP? Sorry für die Flut von Fragen, aber das wird helfen, eine Antwort für Sie zu bekommen :). –

Antwort

1

Geben regex dies einen Versuch:

/href="([^"]+)/g 

Hier ein Beispiel für seine Verwendung ist (JsFiddle Demo)

var subject = '<a href="www.google.com">Google</a>some other text<a href="www.wikipedia.org">Wikipedia</a>'; 
var result = subject.replace(/href="([^"]+)/g, 'href="javascript:anyFunction(\'$1\')'); 
+0

Das funktioniert für mich. Vielen Dank! – MaxiNet

0

Wenn Sie Ihre hrefs eindeutige IDs geben können Sie dies tun:

var val = $("#myHref").attr("href"); 
$("#myHref").attr("href", "javascript:anyFunction('"+val+"');"); 

Wenn Sie eindeutige IDs vermeiden möchten, dann können Sie dies tun (bezogen auf alle eine der):

​$("a").each(function() { 
    var val = $(this).attr("href"); 
    $(this).attr("href", "javascript:anyFunction('"+val+"');"); 
});​​​ 

Wenn Wenn Sie das nicht auf alle hrefs anwenden möchten, können Sie allen hrefs, die Sie ändern wollen, eine Klasse geben und dann einen Selektor wie diesen verwenden: $(".hrefToModify")...

+0

Er hat nicht gesagt, dass er jQuery benutzt hat !!!! ;) –

+0

Ich kann jQuery oder so etwas nicht verwenden, weil dies in einer Appcelator-Anwendung ist. Das Erstellen eines neuen Elements funktioniert auch nicht, weil ich "Dokument" nicht verwenden kann. – MaxiNet

+0

Ah, Entschuldigung. Ich fürchte, ich kann dir nicht helfen, es ist schon eine Weile her, seit ich mit Appcelerator gespielt habe. –

0

NEU:

Wenn Sie Javascript verwenden, können Sie dann Zugriff auf das Anker-Tag selbst erhalten? wenn ja:

anchor_element.href = "javascript:anyFunction('" + anchor_element.href + "')"; 

OLD:

<a id="link1" href="www.google.com">Google</a> 
some other text 
<a id="link2" href="www.wikipedia.org">Wikipedia</a> 

<script> 
document.getElementById('link1').addEventListener('click', function(e) { 
    alert('hello'); 
    e.preventDefault(); 
    return false; 
}); 
</script> 
+0

wie in meinem oberen Kommentar gesagt, kann ich nicht Dokument:/ – MaxiNet

+0

Interessant. Kannst du irgendeinen Javascript Code hinzufügen? Oder haben Sie nur Zugriff über HTML. Wozu hast du generell Zugang? –

+0

Javascript ist verwendbar. Ich habe eine Regex hinzugefügt, um das komplette A-Tag als String zu erhalten. Aber ich bin nicht gut mit RegEx, ich weiß nicht, wie man den href ersetzt. Dies ist: 'pattern =/ /; matches = htmlString.match (Muster); alert (Übereinstimmungen [0]);' returns '' – MaxiNet