在寫了很多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 閱讀(4940)
評論(1) 編輯 收藏 所屬分類:
Html/JavaScript/Ajax