Как унифицировать выборку элементов?
Во первых, если вы используете именно функцию, то вам необходимо проверять в ней тип элемента, если массив перебирать циклом!
Для лучшего понимания советую вам посмотреть исходник функции addClass в библиотеке jquery, там в принципе все понятно.
Вот мой вариант, немного переписаный, но основанный именно на addClass в jquery:Array.isArray = function(obj) {
	return /^\[object (NodeList|Array)\]$/.test(Object.prototype.toString.call(obj));
};

Document.prototype.addClass =
DocumentFragment.prototype.addClass =
NodeList.prototype.addClass =
Element.prototype.addClass = function(value) {
	if( typeof value === "string" && value ) {
		var j, current, clazz, finalValue;
		var stripAndCollapse = function(v, a) {
			var tokens = v.match(/[^\x20\t\r\n\f]+/g) || [];

			return a ? tokens : tokens.join(" ");
		},  classList = stripAndCollapse(value, true);

		var list; Array.isArray(this) ? (list = this) : (list = [], list.push(this));

			list.forEach(function(elem, i) {
				// This expression is here for better compressibility (see addClass)
					current = elem.nodeType === 1 && (" " + stripAndCollapse(elem.className) + " ");
				if( current ) {
					j = 0;
					while( (clazz = classList[j++]) ) {
						if( current.indexOf(" " + clazz + " ") < 0 ) {
							current += clazz + " ";
						}
					}

					// Only assign if different to avoid unneeded rendering.
						finalValue   = stripAndCollapse(current);
					if( finalValue !== elem.className ) {
						elem.setAttribute("class", finalValue);
					}
				}
			});
	}

	return this;
};
https://jsfiddle.net/cen1xxn0/1/
Немного поисправлял. Вы не проверяли, находит он что-нибудь или нет.