优化javascript 1.2以与原型1.6兼容

时间:2010-09-04 14:42:09

标签: javascript refactoring prototypejs

我和CMS一起得到了这段代码 当我尝试使用原型1.6添加代码时 一段代码将是第一个,它将工作 但第二个没有工作

这第一篇

<script language="JavaScript1.2">
var slidemenu_width='120px'
var slidemenu_reveal='11px'
var slidemenu_top='78px'

var ns4=document.layers?1:0
var ie4=document.all
var ns6=document.getElementById&&!document.all?1:0

if (ie4||ns6)
document.write('<div id="slidemenubar2" style="left:'+((parseInt(slidemenu_width)-parseInt(slidemenu_reveal))*-1)+'px; top:'+slidemenu_top+'; width:'+slidemenu_width+'" onMouseover="pull()" onMouseout="draw()">')
else if (ns4){
document.write('<style>\n#slidemenubar{\nwidth:'+slidemenu_width+';}\n<\/style>\n')
document.write('<layer id="slidemenubar" left=0 top='+slidemenu_top+' width='+slidemenu_width+' onMouseover="pull()" onMouseout="draw()" visibility=hide>')
}

var sitems=new Array()

///////////Edit below/////////////////////////////////

//siteitems[x]=["Item Text", "Optional URL associated with text"]

sitems[0]=["Tools", "cp.php?ac=magic&view=me"]
sitems[1]=["Presents", "gift.php?do=view"]


var target=""

/////////////////////////////////////////////////////////

if (ie4||ns4||ns6){
for (i=0;i<sitems.length;i++){
if (sitems[i][1])
document.write('<a href="'+sitems[i][1]+'" target="'+target+'">')
document.write(sitems[i][0])
if (sitems[i][1])
document.write('</a>')
document.write('<br/>\n')
}
}

function regenerate(){
window.location.reload()
}
function regenerate2(){
if (ns4){
document.slidemenubar.left=((parseInt(slidemenu_width)-parseInt(slidemenu_reveal))*-1)
document.slidemenubar.visibility="show"
setTimeout("window.onresize=regenerate",400)
}
}
window.onload=regenerate2

rightboundary=0
leftboundary=(parseInt(slidemenu_width)-parseInt(slidemenu_reveal))*-1

if (ie4||ns6){
document.write('</div>')
themenu=(ns6)? document.getElementById("slidemenubar2").style : document.all.slidemenubar2.style
}
else if (ns4){
document.write('</layer>')
themenu=document.layers.slidemenubar
}

function pull(){
if (window.drawit)
clearInterval(drawit)
pullit=setInterval("pullengine()",10)
}
function draw(){
clearInterval(pullit)
drawit=setInterval("drawengine()",10)
}
function pullengine(){
i    f ((ie4||ns6)&&parseInt(themenu.left)<rightboundary){
themenu.left=parseInt(themenu.left)+10+"px";
}
else if(ns4&&themenu.left<rightboundary)
themenu.left+=10
else if (window.pullit){
themenu.left=0
clearInterval(pullit)
}
}

function drawengine(){
if ((ie4||ns6)&&parseInt(themenu.left)>leftboundary){
themenu.left = parseInt(themenu.left)-10+"px";
}
//themenu.left=parseInt(themenu.left)-10+"px"
else if(ns4&&themenu.left>leftboundary)
themenu.left-=10
else if (window.drawit){
themenu.left=leftboundary
clearInterval(drawit)
}
}
</script>
第二个和平是我使用原型的代码

我认为冲突版本js的问题? 如何更改代码以摆脱javascript 1.2?

1 个答案:

答案 0 :(得分:1)

尝试重写该代码块,创建一个名称空间来存储变量,如下所示:

var tempNamespace={};
tempNamespace.slidemenu_width='120px'
tempNamespace.slidemenu_reveal='11px'
tempNamespace.slidemenu_top='78px'

tempNamespace.ns4=document.layers?1:0
tempNamespace.ie4=document.all
tempNamespace.ns6=document.getElementById&&!document.all?1:0

并更改

<script language="JavaScript1.2">

<script type="text/javascript">

还要用构造一个html字符串替换document.write代码,然后将它放在你想要的div中。