И все же в чем ошибка, может кто догадается как подправить?
смотрите, оказывается все дело в
this
если получать элемент по id то все работает:
вот пример
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Документ без названия</title>
</head>
<body>
<div id="xxx">
<div onclick="alert($$(this).innerHTML);">SJ_TEST xxx</div>
<div onclick="alert($$(this).$$prev().innerHTML);">SJ_TEST 1</div>
<div onclick="alert($$(this).$$prev().innerHTML);">SJ_TEST 2</div>
<div onclick="alert($$(this).$$next().$$('color','red').$$('color','blue').$$next().$$('color','red'));">SJ_TEST 3</div>
<div id="sss" onclick="dd();">SJ_TEST 3sss</div>
<div onclick="alert($$(this).$$html());">SJ_TEST 4</div>
<div onclick="alert($$(this).$$first().$$html());"><span>Привет 1</span> <span>Привет 2</span>SJ_TEST 5</div>
<div onclick="alert($$(this).$$last().$$html());"><span>Привет 3</span> <span>Привет 4</span>SJ_TEST 6</div>
<div onclick="alert($$(this).$$parent().$$html());">SJ_TEST 7</div>
<div onclick="alert($$(this).$$next().$$html());">SJ_TEST 8</div>
</div>
<script type="text/javascript">
function dd() {
alert($$('sss').$$next().$$('color','red').$$('color','blue').$$next().$$('color','red'));
}
var _$$ = {
$:function () {
var obj;
switch(arguments.length) {
case 0:
return document;
break;
case 2:
_$$.$(arguments[0]).innerHTML=arguments[1];
break;
case 3:
_$$.$(arguments[0]).style[arguments[1]]=arguments[2];
break;
}
if(arguments.length>0) {
if(typeof arguments[0] == 'string') {
obj=_$$.$().getElementById(arguments[0]);
}
else {
obj=arguments[0];
}
}
obj.$$ = function() {
switch(arguments.length) {
case 0:
this.$$ = function () {
return _$$.$.apply(null,arguments);
}
break;
case 1:
obj.innerHTML=arguments[0];
break;
case 2:
obj.style[arguments[0]] = arguments[1];
break;
}
return obj;
}
obj.$$prev = function() {
var elm=this;
do {
elm = elm.previousSibling;
} while(elm && elm.nodeType != 1);
return _$$.$(elm);
}
obj.$$next = function() {
var elm=this;
do {
elm = elm.nextSibling;
} while(elm && elm.nodeType != 1);
return _$$.$(elm);
}
obj.$$first = function() {
var elm=this;
elm = elm.firstChild;
return _$$.$(elm && elm.nodeType != 1 ? elm.nextSibling : elm);
}
obj.$$last = function() {
var elm=this;
elm = elm.lastChild;
return _$$.$(elm && elm.nodeType != 1 ? elm.previousSibling : elm);
}
obj.$$parent = function(num) {
var elm=this;
num = num || 1;
for (var i=0; i<num; i++)
if (elm != null) elm = elm.parentNode;
return _$$.$(elm);
}
obj.$$html = function() {
var elm=this;
return _$$.$(elm).innerHTML;
}
return obj;
}
}
var $$ = _$$.$;
</script>
</body>
</html>
если щелкнуть по элементу
<div id="sss" onclick="dd();">SJ_TEST 3sss</div>
несколько раз, то все работает правильно
если щелкать по другим элементам с
$$(this)
несколько раз, то происходит ошибка
как модифицировать вот эту часть кода:
else {
obj=arguments[0];
}
именно в нем происходит при передаче this вот такой колабс
obj=this;