首先看看基本的东西:1.类型选择符。以文档语言对象(Element)类型作为选择符。
如:td { font-size:14px; width:120px; } 
a { text-decoration:none; } 2.包含选择符。选择所有被 E1 包含的 E2 。即 E1.contains(E2)==true 。
如:table td { font-size:14px; } 
div.sub a { font-size:14px; } 3.类选择符。在HTML中可以使用此种选择符。其效果等同于E [ class ~= className ] 。请参阅属性选择符( Attribute Selectors )。
在IE5+,可以为对象的 class 属性(特性)指定多于一个值( className ),其方法是指定用空格隔开的一组样式表的类名。例如:<div class="class1 class2">。
如:div.note { font-size:14px; } 
/* 所有class属性值等于(包含)"note"的div对象字体尺寸为14px */ 4.left属性:
auto  : 默认值。无特殊定位,根据HTML定位规则在文档流中分配 
length  : 由浮点数字和单位标识符组成的长度值 | 百分数。必须定义 position 属性值为 absolute 或者 relative 此取值方可生效。 上面的都明白之后,看下面:页面加载之后调用showMenu() ,把所有tagname为li的对象取出来,然后加上onmouseover和onmouseout方法。
当鼠标放到上面执行this.className+=(this.className.length>0? " ": "") + "showhide";这句话,意思就是如果这个对象有className(样式)了,就再给他加一个showhide,如果没有,直接付值。这样它就多了#nav li.showhide ul {left: auto;}这个样式。
当鼠标离开对象,执行this.className=this.className.replace(new RegExp("( ?|^)showhide\\b"),"");这句话,就是将#nav li.showhide ul {left: auto;}这个样式去掉。

解决方案 »

  1.   

    再仔细讲将有#nav li.showhide ul {left: auto;}没它的区别当没有它:#nav li ul { left: -1000em; position: absolute;}生效
    也就是<ul id="nav">
    <li><a href="#">关于聚想</a>
    <ul>--这个对象,
    它句有left: -1000em; position: absolute这个属性,意思是,绝对位置(一般是根据像素来定位了),该对象往偏离父对象左侧-1000em(相对长度单位。相对于当前对象内文本的字体尺寸。)。当改变类变成:#nav li.showhide ul {left: auto;}
    上面的设定就会被覆盖,变成left: auto;(这个的意思参照上面的讲解)希望你能明白,只是个人意见,欢迎大家来指正
      

  2.   

    谢谢
    基本上看明白了,先把分给你吧!再请教一下,根据你讲的,我把onmouseover触发的函数修改为了:
    this.className+="showhide";
    这样也能用,那原来那句:
    this.className+=(this.className.length >0? " ": "") + "showhide";
    有什么用呢?他为什么要那样写?
      

  3.   

    因为有这样一个可能:
    <div class="cla1"></div>
    可以看到上面的div已经有一个样式了,但是如果我不想让这个样式失去,并且新加一个样式,就要这样写<div class="cla1 cla2"></div>(中间有个空格,这样div就同时具有cla1和cla2定义的样式)
    上面的写法就是基于这样的考虑。如果已经有一个样式了(通过this.className.length >0来判断),就加个空格,再加上showhide;否则就直接加上showhide。
    希望我讲明白了,呵呵