views:

53

answers:

4

Hi!

This is a challenge for any Javascript/jQuery ninjas out there:

What is the best way (using aforementioned languages), to find all of the links in an HTML document and return them all?

In other words, a function that like this - findLinks(document.html.innerHTML) that would return all links found in that HTML.

Thanks,

DLiKS

+1  A: 

To get all hrefs from existing anchor elements, you can do the following, which will return them as an array:

var links = $("a").map(function() {
                return this.href;
            }).get();

If you just want to grab each anchor element and do something with them thereafter, you would just need to select them:

$("a").hide(); // or whatever
karim79
Doesn't find: `<div>Your link: http://www.address.com</div>` =)
Cipi
@Cipi - if that's the requirement, then this probably needs a regex or such.
karim79
+4  A: 

Well, you could fiddle around with a chunky library (and it might be a good idea to do that if you end up wanting to do interesting things to manipulate the results), but just to get the links I think I'd stick to DOM 0:

document.links
David Dorward
+1, first thing I thought of.
Andy E
@Andy E: thanks for letting us know!
Crescent Fresh
@Crescent: You're very welcome, it's always nice to see a fan :-)
Andy E
WWAET? (What Would Andy E Think?)
Crescent Fresh
A: 

I have a bookmarklet that finds all the hyperlinks and writes them to an HTML page:

javascript:ctDL=document.links;ctWI=open('','','width=400,height=300,scrollbars,resizable,menubar');ctDO=ctWI.document;ctDO.writeln('');for(ctI=0;%20ctI')}void(ctDO.close())

gor
A: 

It's either I don't understand the question, or it's not really that much of a challenge:

function findLinks(innerHTML){
    var fragment = document.createElement('div');
    fragment.innerHTML = innerHTML;

    var links = [];
    fragment.find('a').each(function(index, element){
        links.push($(element).attr('href'));
    });
    return links;
}
Igor Zinov'yev