Here's the short version:
I have a link:
    <a id="testlink" href="page.html">page.html</a>

But when I do this:
    alert($('#testlink')[0].href);

I get this:
    http://localhost/page.html

How do I get the *actual* HREF of the link ("page.html"), and not the
mangled version?

Thanks!

----------

The long version:

I have a few links in HTML:
    <a href="/page1.html">/page1.html</a>
    <a href="http://localhost/page1.html";>http://localhost/page1.html</
a>
    <a href="http://localhost:80/page1.html";>http://localhost:80/
page1.html</a>
    <a href="http://localhost/page2.html";>http://localhost/page2.html</
a>
    <a href="http://www.google.com/page1.html";>http://www.google.com/
page1.html</a>

When I do this:
    $("[href]").each(function() {
        var matches = $("[href='" + this.href + "']");
        console.log("Searching for HREF \"" + this.href + "\", text
\"" + $(this).html() + "\"" );
        matches.each(function() {
            console.log("Found: HREF \"" + this.href + "\", text \"" +
$(this).html() + "\"" );
        });
    });

I get this:
    Searching for HREF "http://localhost/page1.html";, text "/
page1.html"
    Found: HREF "http://localhost/page1.html";, text "http://localhost/
page1.html"
    Searching for HREF "http://localhost/page1.html";, text "http://
localhost/page1.html"
    Found: HREF "http://localhost/page1.html";, text "http://localhost/
page1.html"
    Searching for HREF "http://localhost/page1.html";, text "http://
localhost:80/page1.html"
    Found: HREF "http://localhost/page1.html";, text "http://localhost/
page1.html"
    Searching for HREF "http://localhost/page2.html";, text "http://
localhost/page2.html"
    Found: HREF "http://localhost/page2.html";, text "http://localhost/
page2.html"
    Searching for HREF "http://www.google.com/page1.html";, text
"http://www.google.com/page1.html";
    Found: HREF "http://www.google.com/page1.html";, text "http://
www.google.com/page1.html"

The problem is that elem.href is returning a mangled version of the
HREF, but the [href='...'] selector requires the URL exactly as it is
written in the HTML.  So when an element has "/page.html" as it's
HREF, doing elem.href returns "http://localhost/page.html"; instead.
So to search for the "/page.html" HREF, I have to search for:
    [href='page.html']
    [href='/page.html']
    [href='http://localhost/page.html']
    [href='http://localhost:80/page.html']
    [href='https://localhost/page.html']
    [href='https://localhost:443/page.html']

Where "localhost" and "80" must be determined by javascript at runtime
to reflect the current server and port.  Also, the "/page.html" and
"page.html" are not comprehensive.  The javascript would also have to
check for all permutations of "../page.html", "folder/../page.html",
etc.  The root of the problem here is this:  how can I get the
*actual* HREF of a link via javascript, and not the mangled version?

Reply via email to