edom
Version:
JavaScript library for easily DOM manipulating
77 lines (75 loc) • 2.77 kB
JavaScript
(function () {
function createElement(query) {
var creatingEl = 'div';
var classes = [];
var id;
var attrs = [];
var minIndex = getWholeWord(query);
if (minIndex > 0) {
creatingEl = query.substring(0, minIndex);
query = query.substring(minIndex);
}
while (query.length > 0) {
var selector = query[0];
var valueLength = getWholeWord(query.substring(1));
var value = valueLength === -1 ? query.substring(1) : query.substring(1, valueLength + 1);
switch (selector) {
case '.':
classes.push(value);
break;
case '#':
id = value;
break;
case '[':
var equalIndex = value.indexOf('=');
if (equalIndex > -1) {
var attr = value.substring(0, equalIndex);
var attrValue = value.substring(equalIndex + 2, value.length - 2);
attrs.push({
attr: attr,
value: attrValue
});
} else {
attrs.push({
attr: value.substring(0, value.length - 1),
value: ''
});
}
break;
case ' ':
break;
default:
creatingEl = query;
query = "";
break;
}
query = query.substring(value.length + 1);
}
var element = document.createElement(creatingEl);
if (id) {
element.id = id;
}
classes.forEach(function (cl) {
element.classList.add(cl);
});
attrs.forEach(function (attr) {
element.setAttribute(attr.attr, attr.value);
});
return element;
}
function getWholeWord(str) {
var separatorClassIndex = str.indexOf('.');
var separatorIdIndex = str.indexOf('#');
var separatorAttributeIndex = str.indexOf('[');
var separatorSpaceIndex = str.indexOf(' ');
var existedIndexes = [separatorClassIndex, separatorIdIndex, separatorAttributeIndex, separatorSpaceIndex]
.filter(function (t) {
return t > -1
});
var minIndex = existedIndexes.length > 0 ? Math.min.apply(null, existedIndexes) : -1;
return minIndex;
}
window.eDOM = {
el: createElement
};
})();