2011-04-26 54 views
0

我试图更改名称为“make”或“model”的数组列表中的所有字段。我确信我没有做一些简单的工作。但是下面的这个函数不起作用。如何更改数组列表中多个字段的类名称?Javascript - 使用数组更改类名称

CSS 
hide { 
display: none; 
} 

array = ['make','model']; 

function deactivateField(array) { 
    count = array.length; 
    for (i = 0; i < count; i++) { 
     array[i].className = 'hide'); 
    } 
} 


<td id="make" name="make" class="show">aaa</td> 
<td id="make" name="make" class="show">bbb</td> 
<td id="make" name="make" class="show">ccc</td> 

<td id="model" name="model" class="show">111</td> 
<td id="model" name="model" class="show">222</td> 
<td id="model" name="model" class="show">333</td> 

回答

0

这里就是我得到了这个工作:

function deactivateField(field_array) { 
    cnt = field_array.length; 
    for (a = 0; a < cnt; a++) { 
     changeClassByName(field[a], 'hide'); 
    } 
} 

function changeClassByName(name, classname) { 
    var nm = document.getElementsByName(name); 
    count = nm.length; 
    for(b = 0; b < count; b++){ 
     nm[b].className = classname; 
    } 
} 
0

首先,在HTML页面中不能有多个具有给定ID的元素。

其次,当你做

array[i].className = 'hide' 

你所要求的属性从阵列拍摄的字符串className;相当于做"make".className。自然,这是行不通的。你的意图是找到具有id或名称“make”的元素,然后更改该元素的className,而不是单词“make”。

如果你真的是通过独特的ID数组,那么你可以做

for (i = 0; i < count; i++) { 
    var el = document.getElementById(array[i]); 
    el.className = 'hide'); 
} 

但同样,这需要每一个元素都有其自身独特的ID。

0

我的答案假设你会给每个元素一个唯一的ID(因为这是无效的),并且名称属性的值将保持不变。

function deactivateField(array) { 
    var i = 0, j = 0, elements; 
    elements = document.getElementsByTagName("td"); 
    for (; i< elements.length; i++) { 
     for (; j<array.length; j++) { 
     if (elements[i].name === array[j]) { 
      elements[i].className = "hide"; 
     } 
     } 
    } 
} 
0

首先,“id”意思是独特的。用jQuery你可以做到这一点(未经测试)。我不知道了手,如果jQuery将尝试处理多个元素具有相同的“ID”:

array = ['make','model']; 
function deactivateField(array) { 
    count = array.length; 
    for (i = 0; i < count; i++) { 
     $('#' + array[i]).removeClass('show').addClass('hide'); 
    } 
} 
0

首先,你不能有相同ID的多个元素。 Id的意思是独一无二的。此外,您拥有的数组实际上并没有引用任何元素,它只是一个字符串数组。您将需要使用诸如document.getElementsByTagName之类的选择器来获取一组选择器(因为IE不支持getElementsByClassName),然后遍历它们以获取具有所需类的元素。

array = ['make','model']; 
elArray = document.getElementsByTagName("td") 
function deactivateField(array) { 
    count = elArray.length; 
    for (i = 0; i < count; i++) { 
     for(x = 0; x < array.length; x++) 
     { 
      if(array[x].test(elArray[i])) 
      { 
        elArray[i].className = array[x] + " hide"; 
      } 
     } 
    }   

<td name="make" class="make show">aaa</td> 
<td name="make" class="make show">bbb</td> 
<td name="make" class="make show">ccc</td> 

<td name="model" class="model show">111</td> 
<td name="model" class="model show">222</td> 
<td name="model" class="model show">333</td> 
0

数组不包含元素本身,只包含对应于所需id的字符串。保持唯一的ID。然后使用DOM为了得到节点:document.getElementById('idName');。然后,你将能够操纵实际的元素。

另一件事,CSS应该是.hide,因为hide试图找到这样的标签。