domurl 2.x (former jsurl)
Lightweight URL manipulation with JavaScript for both DOM and server JavaScript.
Goal
To have a convenient way working with URLs in JavaScript. From time to time there are usual tasks
when it is required to add or remove some parameters to some basic URL or change some other URL
parts.
There is no easy standard way to do it in JavaScript.
This small library intended to fix that problem
Supported Browsers
This library was tested under:
- IE 7+
- Chrome 25+
- Opera 12.15+
- Firefox 20+
- Android browser 2.3+
- NodeJS 0.10+
Theoretically it should work fine with newer or older versions of these browsers, but
it was not fully tested yet. If you'll find any compatibility issues, please, let me know by
leaving a bug report here: https://github.com/Mikhus/domurl/issues
You can run basic tests for your browser here: https://rawgit.com/Mikhus/domurl/master/test/url.html or
run test.html from this repository locally. If any test has not been passed, please,
open a bug report as described above providing browser and OS version on each test
which has been failed.
How To Use
First of all it is required to include Url class on the page. It can be simply done as
<script src="url.min.js"></script>
Then any time it's required to do some work over the URL string, it's just required to
instantiate the Url object and work with that object instead of initial string. See API
description below to get a clue.
Install with JAM
It is possible also to install domurl via JAM repository (http://jamjs.org/).
Could be simply done as:
$ jam install domurl
Install with Bower
It is also possible now to install domurl using Bower package repository.
Could be done simply as:
$ bower install domurl
Install with NPM
Domurl is available on NPM and is now works well for both server and browser:
$ npm install domurl
API
Methods:
Url({string} [url], {boolean} [noTransform]) -> {Url}
Constructor. If url argument is not passed, current document URL will be used.
If second argument bypassed as true value it will try to do no transforms
on a given source URL to keep it form as it was initially given. Otherwise,
by default, it will try to resolve given URL to an absolute form.
Url.toString() -> {string}
Converts URL to string representation. As far as it's special method, any time string
operations is performed over Url objects this method is automatically called
Url.paths({Array} [pathStrings])
Returns Url.path representation as array or sets it via array representation
if optional array of pathStrings was provided.
Url.encode({string} urlPart) -> {string}
Performs URI-compatible encoding of the given urlPart component. It works not
the same as native encodeURIComponent()!
Url.decode({string} encUrlPart) -> {string}
Performs decoding of URI-encoded component. It works not the same as native
decodeURIComponent()!
Url.clearQuery() -> {Url}
Removes all query string parameters from the URL
Url.queryLength() -> {Number}
Returns total count of the query string parameters.
Url.isEmptyQuery() -> {boolean}
Returns true if query string contains no parameters, false otherwise.
Properties:
Url.protocol - protocol part of URL, everything between the beginning of the URL string
and "://" delimiter (if specified)
Url.user - auth user name (if specified)
Url.pass - auth user password (if specified)
Url.host - host name (if specified)
Url.port - port number (if specified)
Url.path - document path
Url.query - QueryString object. It's a simple Javascript object with automatic string
mapping. String representation contains everything after "?" and to the end of QueryString
Url.hash - Anchor part of the URL. Everything after "#" and to the end of anchor
Usage Examples
var u = new Url;
var u2 = new Url( "http://example.com/some/path?a=b&c=d#someAnchor");
var u3 = new Url( "/my/site/doc/path?foo=bar#baz");
alert( u2.query.a);
alert( u3.query["foo"]);
u.query.a = [1, 2, 3];
u.query.b = 'woohoo';
if (u.query.a instanceof Array) {
u.query.a.push(4);
}
else {
u.query.a = [u.query.a];
u.query.a.push(8)
}
delete u.query.a
delete u.query["a"]
u.clearQuery();
alert( u);
alert(
'protocol = ' + u.protocol + '\n' +
'user = ' + u.user + '\n' +
'pass = ' + u.pass + '\n' +
'host = ' + u.host + '\n' +
'port = ' + u.port + '\n' +
'path = ' + u.path + '\n' +
'query = ' + u.query + '\n' +
'hash = ' + u.hash
);
u.path = '/some/new/path';
console.log(u.paths());
u.paths(['some', 'new', 'path']);
console.log(u.path);
u.protocol = 'https'
var str = '<a href="' + u + '">My Cool Link</a>';
var a = document.createElement('a');
a.href = u;
a.innerHTML = 'test';
document.body.appendChild( a);
u += '';
String(u);
u.toString();
License
This code is available under MIT license. Feel free to do what you want.