2010-05-25 38 views

回答

5

您可以使用getElementsByTagName

var fieldset= document.getElementById('something'); 
var fieldtags= ['input', 'textarea', 'select', 'button']; 

for (var tagi= fieldtags.length; tagi-->0) { 
    var fields= fieldset.getElementsByTagName(fieldtags[tagi]); 
    for (var fieldi= fields.length; fieldi-->0;) { 

     fields[fieldi].className= 'hello'; 
    } 
} 

(如果你只关心input领域,你可能会失去外部标记循环。)

如果你需要他们的文档顺序(而不是按标签分组)你不得不走了过来手动的元素,这将是一个痛苦和有点慢。你可以使用fieldset.querySelectorAll('input, textarea, select, button'),但并非所有的浏览器都支持。 (特别是IE6-7早于它。)

+0

谢谢你提供一个可行的解决方案,不使用整个库来做这么简单的事情。 +1 – James 2010-05-25 19:18:39

+0

虽然问题,简单地'fieldi - '是不是'> 0'测试类型的冗余? – James 2010-05-25 19:19:25

+0

这是一个反向(或无序)迭代的普遍成语。在这种情况下它是多余的,但是否则它会防御顶部边界低于底部边界(在这种情况下,如果没有'> 0',你会得到一个无限循环)。 – bobince 2010-05-25 20:40:47

-1

永久?在您选择的编辑器中找到&替换。

当用户点击某些东西? jQuery方式:

$('fieldset <selector>').each(function() { 
    $(this).removeClass('old').addClass('new'); 
});
4

使用jQuery(耶!):

$('#fieldset-id :input').each(function(index,element) { 
    //element is the specific field: 
    $(element).doSomething(); 
}); 
+1

OP在哪里提到他/她正在使用jQuery? – James 2010-05-25 19:17:22

+0

@ J-P只是因为他们没有明确说他们没有使用jQuery并不意味着它不是一个可行的选择。引入一个图书馆来解决这个问题是一件很有意思的事情,但下一个类似的问题我们可以节省一点,之后的时间我们多存一些,然后值得。 – 2010-05-25 19:22:19

+3

那么,为什么不探索所​​有其他的可能性呢? MooTools的?原型?道场?分机?的Qooxdoo? ...我认为最好总是假设OP希望使用* no *库,除非明确说明。 – James 2010-05-25 19:25:10

1

注意下面的解决方案是对非JQUERY实现。当您执行下面的代码,然后你可以使用document.getElementsByClassName(“elementsInFieldSetClass”),它将返回与该类元素的数组

实现一个getElementsByClassName方法方法是这样的。

function initializeGetElementsByClassName() 
     { 
      if (document.getElementsByClassName == undefined) { 
       document.getElementsByClassName = function(className) 
       { 
        var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)"); 
        var allElements = document.getElementsByTagName("*"); 
        var results = []; 

        var element; 
        for (var i = 0; (element = allElements[i]) != null; i++) { 
         var elementClass = element.className; 
         if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass)) 
          results.push(element); 
        } 
        return results; 
       } 
      } 
     } 

window.onload = function() { 
    initializeGetElementsByClassName(); 
}; 
0

另一个jQuery解决方案在这里。

如果你简单地增加一个类(ES)的元素,它的这种简单:

$('fieldset :input').addClass('newClass'); 

.addClass()(就像许多其他的jQuery函数)的所有匹配的元素将工作选择。

示例:http://jsfiddle.net/HANSG/8/

相关问题