JavaScript Add/Update Query String

Function and test suite for adding or updating a query string parameter.

by dominic_p

HTML

Run this code and check your console.

JavaScript

/**
 * JavaScript Query string replacement function and test suite.
 * 
 * The function is designed to add or update a query string parameter in a given
 * URL. If all of the tests pass, the function should be pretty good.
 */
var test_val = 'new',
	test_uris = [
		[ 'http://example.com/', 'http://example.com/?param=' + test_val ],
		[ 'http://example.com/?', 'http://example.com/?param=' + test_val ],
		[ 'http://example.com/?param', 'http://example.com/?param=' + test_val ],
		[ 'http://example.com/?param=val', 'http://example.com/?param=' + test_val ],
		[ 'http://example.com/?param=val&param2', 'http://example.com/?param=' + test_val + '&param2' ],
		[ 'http://example.com/?param=&param2', 'http://example.com/?param=' + test_val + '&param2' ],
		[ 'http://example.com/?param=&param2', 'http://example.com/?param=' + test_val + '&param2' ],
		[ 'http://example.com/?param=val&param2=val', 'http://example.com/?param=' + test_val + '&param2=val' ],
		[ 'http://example.com/?param2=val&param[]=val', 'http://example.com/?param2=val&param[]=' + test_val ],
		[ 'http://example.com/?param[test]=val&param2=val', 'http://example.com/?param[test]=' + test_val + '&param2=val' ],
		[ 'http://example.com/?param[test]=val&param2[]=val', 'http://example.com/?param[test]=' + test_val + '&param2[]=val' ],
		[ 'http://example.com/?param[]=val&param[]=another&param2=val', 'http://example.com/?param[]=' + test_val + '&param[]=' + test_val + '&param2=val' ],
		[ 'http://example.com/?param=val#', 'http://example.com/?param=' + test_val + '#' ],
		[ 'http://example.com/?param=val&param2=val#param=val', 'http://example.com/?param=' + test_val + '&param2=val#param=val' ],
		[ 'http://example.com/?param=val&param2=val#param=val#test', 'http://example.com/?param=' + test_val + '&param2=val#param=val#test' ],
		[ 'http://example.com/?param2=val&param=val#param=val#test?param=val', 'http://example.com/?param2=val&param=' + test_val + '#param=val#test?param=val' ],
		[...