posts - 15,  comments - 8,  trackbacks - 0

在写了很多js后,会发现在js中总会出现各种各样奇怪的问题,主要的问题是不能获得所需要的对象.
一般来说,我们所需要获得的对象有几种办法获得:
1. ID 法,通过使用document.getElementById()这个方法获得用户所需的对象,你只需要在标签中加入id="yourIdName"这样的属性,你就可以用这个方法获得这个对象了.举个例子来说:有如下代码
<table><tr id='zergTr'><td>这里是zergpest的第一行</td></tr></table>
那么我们要获得这个tr,并且设置这个tr为不可见,应该这样做.请看如下代码:
<script type="text/javascript">
      var zergpest = document.getElementById("zergTr");
      zergpest.style.display = "none";
</script>
这样就可以通过使用document.getElementById() 这个方法来获得改对象,并且设置该对象为不可见.
但是,如果我们需要设置多个具有同样ID的对象不可见的时候,这个方法就不能用了,因为无论你怎么为后面的<tr>标签添加id属性,用document.getElementById()这个方法获得的只能是第一个具有该ID的对象,其实其他的ID这时候应该是属于伪Id了.你所要操作的只能操作到第一个具有该ID的对象,而不是具有所有你所设置的具有该ID的对象.那么这时候我们该怎么办呢,请看第2种方法.
2.Name法,通过使用document.getElementsByName()这个方法获得用户所需的对象,你需要做的是在标签中加入name="yourname"这样的属性,道理上说你就可以使用该方法获得该对象了.然而,有些时候确不是这样的,document.getElementsByName()这个方法其实主要是针对form标签中的对象有用,在form标签以外的对象就不一定有用了,这里说的不一定,是说有时候有用,有时候没有用.不过也可能和我用的IE7 beta3 有关,没有深入研究过.举个例子了说,有如下代码.
<table><tr name='zergTr'><td>这里是zergpest的第一行</td></tr></table>
<table><tr name='zergTr'><td>这里是zergpest的第二行</td></tr></table>
我们这里有二个相同的name,因为这个方法是获取具有多个name的,如果只有一个name的话,那么建议你用ID法来获取,而不要用这种,不然的话你需要进行判断length值.
我们可以用如下代码来获取该对象,并且设置该对象为不可见,代码如下:
<script type="text/javascript">
    var zergpest = document.getElementsByName("zergTr");
    if (!zergpest.length)
    {
          zergpest.style.display = "none";
     }
     else
    {
          for (var i=0;i<zergpest.length;i++)
          {
               zergpest[i].style.display = "none";
          }
     }
</script>
这样,道理上我们应该可以设置所有name值为zergTr的对象为不可见了,可是事实往往并不能如你所希望的,如果我们在<tr>前面加个<form>标签,那么结果就可以得到你所需要的结果了,但没有form标签的话,结果是有时候可以正确,有时候不正确,甚至不能获得对象.这时候,我们用第3种方法来解决,这就是轩辕的JS对象大招了.
3.超级Name大法,通过使用document.documentElement.getElementsByTagName()这个方法结合name法来获得这些你所需要的对象.还是用刚才的例子.如下:
<table><tr name='zergTr'><td>这里是zergpest的第一行</td></tr></table>
<table><tr name='zergTr'><td>这里是zergpest的第二行</td></tr></table>
这里我们需要设置该<tr>标签为不可见,而也不希望加上看着很不愉快的<form>标签,这时我们就需要用如下代码:
<script type="text/javascript">
    var zergpest = document.documentElement.getElementsByTagName("tr");
    if (!zergpest.length)
    {
        zergpest.style.display == "none";
    }
    else
    {
        var realZerg = [];
        for (var i=0;i<zergpest.length;i++)
        {
             if (zergpest[i].name == "zergTr")
            {
                realZerg.push(zergpest[i]);
            }
        }
        if (realZerg.length)
        {
            for (var j=0;j<realZerg.length;j++)
            {
                realZerg[j].style.display = "none";
            }
        }
    }
</script>
这样就可以把所有name值等于yourname这样的多个对象设置为不可见了,这就是轩辕的超级Name大法,:),不要觉得用了2个for会牺牲性能,占用用户的cpu,其实现在用户的cpu最少都是1.5GHz以上,这点小运算对CPU来说根本就是骆驼身上的一个细胞,而且用户的cpu闲着也是闲着,既然对他供着电,那就让他做点事情吧.:)这3种方法各有好处,按照不同的需要可以选择不同的方法.终究会达到js所需要的目的.


原文地址:http://zergpest.spaces.live.com/blog/cns!2C6F0CD52F9AC08D!1480.entry?_c=BlogPart
posted on 2008-04-20 22:27 lvq810 阅读(4901) 评论(1)  编辑  收藏 所属分类: Html/JavaScript/Ajax

只有注册用户登录后才能发表评论。


网站导航: