If you have used Google/Blogger/YouTube/etc API with JSON format, you may have seen the link array like
entry =
{
"link":
[
{
"rel": "replies",
"type": "application/atom+xml",
"href": "http://example.com/link1",
"title": "Post Comments"
},
{
"rel": "replies",
"type": "text/html",
"href": "http://example.com/link2",
"title": "Comments"
},
{
"rel": "edit",
"type": "application/atom+xml",
"href": "http://example.com/link3",
},
{
"rel": "self",
"type": "application/atom+xml",
"href": "http://example.com/link4",
},
{
"rel": "alternate",
"type": "text/html",
"href": "http://example.com/link5",
"title": "Example Title"
}
]
}
Usually, you want the one which type is text/html and a link to normal webpage. I used to write a for loop, every time I need to get that one. I do mean every time, who knows how much time I wasted in writing the same loop code.I finally came up a quick and better way using jQuery:
var link = $($.grep(entry.link, function(link, idx) {return link.rel == 'alternate'})).prop('href');
// breakdown
var link = $(
$.grep(entry.link,
function(link, idx) {
return link.rel == 'alternate'
})
).prop('href');
Even its reasonably little longer one-liner, its much more clear than a for loop, and could be same clear for who is not familiar with jQuery. The only drawback I could think of is: it could be slower than for loop, though I havent tested.jQuery accepts objects not just DOM, you can have some methods though you dont have selector-like to filter, but in this case, $.grep is good enough for processing. The result will be an array of objects and I use prop() to extract the href attribute after the results are turned into jQuery object.
Certainly, you can use just match_results[0].href, directly access objects href attribute. But you can not guarantee that match_results is not an empty array. If it is, you will get a Type Error, because your code tries to get undefined.href.
Using prop(), it will fail silently by returning undefined and you can check it or just leave it in <a/> if you dont care.