2011-01-12 8 views
0

I entsprechen bin diesen Code zur Zeit mit (zusammen mit Mootools) ein Array aller Anker in dem #subnav div zu bauen, die eine bestimmte URL-Zeichenfolge enthalten:immer alle Links auf einer Seite, die eine URL-Zeichenfolge

$('subnav').getElements('a[href*=/'+href+']')

Problem ist, wenn ich nach work.aspx?subsection=24&project=1 suchen, die Anker mit einer URL von work.aspx?subsection=24&project=15 übereinstimmen wird.

Wie kann ich das verhindern?

+0

Können Sie erklären, was es ist, dass Sie „enthalten“ zu wollen, hier bedeuten? Was genau sollte es für einen href-Wert bedeuten, den URL-String (Fragment einer URL? Nicht klar), den Sie suchen, zu "enthalten"? – Pointy

+1

'console.log (document.getElements (" a [href $ = work.aspx? Subsection = 24 & projekt = 1] "));' - endet am, nicht enthält, die nicht pickup projekt = 15. –

Antwort

0

Ich werde meine eigene Frage beantworten. Es war so einfach wie das Ändern der * in eine $.

$('subnav').getElements('a[href$=/'+href+']')

+0

Wer hat einen Punkt weggenommen, und warum? Das funktioniert und funktioniert gut. –

+0

vielleicht wegen 'Gehen, meine eigene Frage zu beantworten.', als die _same_ Antwort 8 Stunden zuvor als Kommentar gepostet worden war. –

0

Die einzige Lösung, die ich mir vorstellen kann, ist die Verwendung von Regexes; so etwas wie dieses:

$('subnav').getElements('a').filter(function (element, index) { 
    return /work\.aspx\?subsection=24&project=1(?:$|&)/.test(element.href); 
}); 

Das Projekt wird übereinstimmen regex = 1 und dann entweder ein & oder das Ende des Strings. Es verwendet MooTools (oder die nativen Browser) Array.filter, um alle Nicht-Übereinstimmungen zu entfernen. Es ist nicht die eleganteste Lösung, besonders wenn Sie diese dynamisch verwenden, da Sie dann Code schreiben müssen, um eine neue Regex zu erstellen.

+1

Es ist auch eine sehr teure Operation :) –

+0

Einverstanden, aber es ist das einzige, was ich denken könnte, um das Problem zu lösen. – Reid

+0

Hmm. Ja, ich kann es mir nicht teuer leisten. Die Seite ist schon unglaublich schwer in der JS. –

0

Klingt wie dies durch eine 301 oder 302-Umleitung eleganter behandelt werden soll ...

+0

Nicht sicher warum. Ich versuche nicht, jemanden umzuleiten. –

+0

Aber ist das nicht genau das, was Sie tun, indem Sie die URLs durch Javascript ändern? Google wird immer noch folgen ... & project = 1. Vielleicht verstehe ich dein Problem einfach nicht gründlich genug ... – restlessdesign

+0

Ich ändere keine URLs. Ich suche nach Ankern, die mit der URL der aktuellen Seite übereinstimmen, und füge diesen Ankern eine Klasse "hier" hinzu. Ich würde normalerweise diese Server-Seite tun, aber diese Seite ist voll auf Ajax. –

Verwandte Themen