【发布时间】:2010-05-26 02:54:46
【问题描述】:
我想更改特定字段集中所有字段的类。
有没有办法循环遍历字段集中的字段?
【问题讨论】:
标签: javascript html fieldset
我想更改特定字段集中所有字段的类。
有没有办法循环遍历字段集中的字段?
【问题讨论】:
标签: javascript html fieldset
您可以使用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 早于它。)
【讨论】:
fieldi-- 有什么问题... >0 测试不是多余的吗?
>0,您将获得无限循环。
使用 jQuery(耶!):
$('#fieldset-id :input').each(function(index,element) {
//element is the specific field:
$(element).doSomething();
});
【讨论】:
请注意,以下解决方案适用于非 JQUERY 实现。
像这样实现一个 getElementsByClassName 方法:
实现下面的代码后,您可以使用 document.getElementsByClassName("elementsInFieldSetClass") 它将返回具有该类的元素数组。
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();
};
【讨论】:
这里是另一个 jQuery 解决方案。
如果您只是向元素添加一个类,就这么简单:
$('fieldset :input').addClass('newClass');
.addClass()(与许多其他 jQuery 函数一样)将作用于与选择器匹配的所有元素。
【讨论】:
永久?在您选择的编辑器中查找和替换。
当用户点击某物时? jQuery方式:
$('fieldset <selector>').each(function() {
$(this).removeClass('old').addClass('new');
});
【讨论】: