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 閱讀(4944) 評論(1)  編輯  收藏 所屬分類: Html/JavaScript/Ajax
          主站蜘蛛池模板: 沭阳县| 彩票| 龙口市| 叙永县| 柳河县| 永昌县| 视频| 新密市| 巧家县| 芮城县| 乐平市| 中山市| 黔江区| 清镇市| 云南省| 遵义县| 锦屏县| 玉林市| 黄冈市| 莆田市| 娱乐| 那坡县| 太和县| 西青区| 富顺县| 铜山县| 和硕县| 万源市| 中阳县| 秭归县| 碌曲县| 东至县| 红河县| 开鲁县| 连江县| 远安县| 稻城县| 巫山县| 什邡市| 牟定县| 兴业县|