Deff,
собирал по кускам творения
sash003, может у него иной комплект. нажимать кнопку показать не рекомендуется для душевного спокойствия.
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
a{
height: 50px;
background-color: #0000CC;
color: rgb(153, 255, 255);
font-size: 28pt;
}
</style>
</head>
<body>
<p>
<a href="#">рррррррр</a></p><br><div><a href="#">рррррррр</a></div><div><a href="#">рррррррр</a><a href="#">рррррррр</a></div>
<script>
function _init_(el){
this.s = typeof el == "string" ? document.querySelectorAll(el) : el.length ? el : [el];
}
// главная и самая сложная функшн
function _A_(el){
return new _init_(el)
}
_init_.prototype.css = function(obj){
if(typeof obj === 'object'){
for (var e = 0; e < this.s.length; e++){
for (i in obj){
this.s[e].style[i] = obj[i];
}
}
return this;
}
else {
if(obj === 'width') return this.s[0].offsetWidth;
if(obj === 'height') return this.s[0].offsetHeight
else return this.s[0].style[obj] || getComputedStyle(this.s[0])[obj];
}
}
_init_.prototype.attr = function(){
}
_init_.prototype.slideUp = function (duration){
var self = this;
this.css({'overflow' : 'hidden'});
var height = parseInt(this.css('height'));
for(var i = 1; i <= height ; i++){
(function(i){
setTimeout(function(){
self.css({'height' : (height-i)+'px'}); // this.css is not a function. хотя overflow устанавливает перед этим
}, i*duration/height);
})(i);
}
return this;
}
// установка обработчиков
_init_.prototype.on = function(event, func, param){
for(var i = 0; i < this.s.length; i++){
addEvent(this.s[i], event, func, param);
}
}
_init_.prototype.html = function(html){
for(var i = 0; i < this.s.length; i++){
this.s[i].innerHTML = html
}
}
function addEvent(elem, type, handler, param){
param = param || false;
handler.bind(elem)
if(elem.addEventListener){
elem.addEventListener(type, handler, param);
} else {
elem.attachEvent('on'+type, handler);
}
return false;
}
function fn(n)
{
return function() {
_A_(this).css({'backgroundColor' : 'red'})
_A_(this).html(n++); // чтобы так можно было делать
}
}
_init_.prototype.children = function() {
var kids = [];
for (var i = 0; i < this.s.length; i++) {
for (var c = this.s[i].firstChild; c != null; c = c.nextSibling)
if (c.nodeType === 1) kids.push(c);
};
return _A_(kids);
}
_init_.prototype.childrenFilter = function(el) {
var kids = [];
for (var i = 0; i < this.s.length; i++) {
var arr = Array.prototype.map.call(this.s[i].querySelectorAll(el), function(el) {
return el
});
for (var c = this.s[i].firstChild; c != null; c = c.nextSibling)
if (c.nodeType === 1 && arr.indexOf(c) != -1) kids.push(c);
}
return _A_(kids) ;
}
_A_('body').childrenFilter('div').css({'backgroundColor' : 'red'}).html('hhhh')
//var x = _A_("p");
//x.slideUp(1000)
</script>
</body>
</html>