如何在 getElementsByName 中使用正则表达式遍历所有元素?
最佳答案
如果你的意思是:
var elementArray = document.getElementsByName("/regexhere/");
那么不,那是不可能的。
要做你想做的事,你必须得到所有的元素,然后检查每一个元素并检查它的名称。
这是一个函数,它将遍历所有元素并将具有特定名称的所有元素添加到数组中:
function findElements(name)
{
var elArray = [];
var tmp = document.getElementsByTagName("*");
var regex = new RegExp("(^|\\s)" + name + "(\\s|$)");
for ( var i = 0; i < tmp.length; i++ ) {
if ( regex.test(tmp[i].name) ) {
elArray.push(tmp[i]);
}
}
return elArray;
}
并用作:
var elName = "customcontrol";
var elArray = customcontrol(elName);
或者通过 className 可能更容易
function findElements(className)
{
var elArray = [];
var tmp = document.getElementsByTagName("*");
var regex = new RegExp("(^|\\s)" + className+ "(\\s|$)");
for ( var i = 0; i < tmp.length; i++ ) {
if ( regex.test(tmp[i].className) ) {
elArray.push(tmp[i]);
}
}
return elArray;
}
并用作:
var elClassName = "classname";
var elArray;
if (!document.getElementsByClassName)
{
elArray= findElements(elClassName );
}
else
{
elArray = document.getElementsByClassName(elClassName);
}
这将执行您想要的操作,而无需 getElementByName。
虽然我认为你的意思是 getElementsByName
如果您想查找名称仅为“customcontrol”的元素,您可以使用:
var regex = new RegExp("(^|\\s)" + name + "(\\s|$)");
如果您想查找名称为“customcontrol”的 STARTED 元素,您可以使用:
var regex = new RegExp("(^|\\s)" + name);
编辑:
如果您使用 jQuery,这会更容易,那么这样做:
var elArray = $("*[name^='customcontrol']");
//Use JavaScript to loop through
for (var a = 0; a< elArray.length;a++)
{
//Loop through each element
alert(elArray[a]);
}
//Or
$("*[name^='customcontrol']").css("color","red"); //Or whatever you want to do to the elements
关于javascript - getElementsByName 和正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3184093/