2011-07-28 47 views
0

我有以下功能應該得到一個文檔中的所有元素與給定的類:的Javascript隱藏/顯示類問題

function getElementByClass(objClass) 
{ 
// This function is similar to 'getElementByID' since there is no inherent function to  get an element by it's class 
    var elements = (ie) ? document.all : document.getElementsByTagName('*'); 
    for (i=0; i<elements.length; i++) 
{ 
    alert(elements[i].className); 
    alert(objClass); 
    if (elements[i].className==objClass) 
    { 
     return elements[i] 
    } 
} 
} 

當我調用該函數與:

<script type="text/javascript">document.write(getElementByClass('done'));</script> 

什麼都沒發生。功能有問題嗎?

+4

爲什麼不使用像jQuery這樣的庫?這樣你就不必重新發明輪子。 – robbrit

+2

我討厭成爲這個人,但爲什麼不使用jQuery,那麼你所要做的就是'$(「。class_name」)',而你擁有它們。 –

+0

相當新的JavaScript,還沒有像jQuery那麼遠。我必須安裝任何東西才能讓jQuery工作嗎? 編輯:我現在在我的網站上引發了jQuery源代碼,我不知道它的工作原理就像一個簡單的.js文件。 – muttley91

回答

2

此功能沒有得到所有元素與類名,它得到一個。你打算如何使用它的意圖是什麼? document.write看起來像是一件有趣的事情,可以處理頁面上已有的DOM元素。

我討厭只說「使用jQuery」......但你可能應該。

除了缺少ie的聲明外,此功能還是有效的。你將遇到的一個問題是,如果你在一個元素上有多個類,這個函數將不起作用。

+0

我相信我現在會用jQuery來做到這一點。謝謝! – muttley91

2
document.getElementsByClassName('done'); 

編輯:

源:http://robertnyman.com/2008/05/27/the-ultimate-getelementsbyclassname-anno-2008/

/* 
    Developed by Robert Nyman, http://www.robertnyman.com 
    Code/licensing: http://code.google.com/p/getelementsbyclassname/ 
*/ 
var getElementsByClassName = function (className, tag, elm){ 
    if (document.getElementsByClassName) { 
     getElementsByClassName = function (className, tag, elm) { 
      elm = elm || document; 
      var elements = elm.getElementsByClassName(className), 
       nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null, 
       returnElements = [], 
       current; 
      for(var i=0, il=elements.length; i<il; i+=1){ 
       current = elements[i]; 
       if(!nodeName || nodeName.test(current.nodeName)) { 
        returnElements.push(current); 
       } 
      } 
      return returnElements; 
     }; 
    } 
    else if (document.evaluate) { 
     getElementsByClassName = function (className, tag, elm) { 
      tag = tag || "*"; 
      elm = elm || document; 
      var classes = className.split(" "), 
       classesToCheck = "", 
       xhtmlNamespace = "http://www.w3.org/1999/xhtml", 
       namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null, 
       returnElements = [], 
       elements, 
       node; 
      for(var j=0, jl=classes.length; j<jl; j+=1){ 
       classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]"; 
      } 
      try { 
       elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null); 
      } 
      catch (e) { 
       elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null); 
      } 
      while ((node = elements.iterateNext())) { 
       returnElements.push(node); 
      } 
      return returnElements; 
     }; 
    } 
    else { 
     getElementsByClassName = function (className, tag, elm) { 
      tag = tag || "*"; 
      elm = elm || document; 
      var classes = className.split(" "), 
       classesToCheck = [], 
       elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag), 
       current, 
       returnElements = [], 
       match; 
      for(var k=0, kl=classes.length; k<kl; k+=1){ 
       classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)")); 
      } 
      for(var l=0, ll=elements.length; l<ll; l+=1){ 
       current = elements[l]; 
       match = false; 
       for(var m=0, ml=classesToCheck.length; m<ml; m+=1){ 
        match = classesToCheck[m].test(current.className); 
        if (!match) { 
         break; 
        } 
       } 
       if (match) { 
        returnElements.push(current); 
       } 
      } 
      return returnElements; 
     }; 
    } 
    return getElementsByClassName(className, tag, elm); 
}; 
+1

不適用於所有瀏覽器。 – aepheus

1

如果您已發佈完整的源又是什麼在 VAR元素IE =(IE)? document.all:document.getElementsByTagName('*'); 嘗試通過螢火蟲跟蹤錯誤。

1

var elements = (ie)被引用一個未定義的變量ie

0

您應該在可用時使用getElementsByClassName。

1

你有沒有考慮過使用JavaScript庫?像這樣的功能已經寫了很多times before,在這些事情上浪費時間是很痛苦的。