我想要创建一个脚本(JavaScript),通过所有的“无线电”元素来枚举那些具有与某些regexs匹配的"ID“(或者可能是”名称“和”值“)的元素。如果有匹配,我将根据匹配的正则表达式执行额外的代码。按"ID“进行搜索应该比按”名称“和”值“搜索更容易,但在某些情况下元素没有"ID",因此在这些情况下,我会按"Name”和"Value“搜索regex匹配项。
以下是一些典型的“无线电”元素:
<span>
<input id="ABC123" onclick="somefunction('DEF');" name="GHI" value="JKL45" type="radio">
<input id="MNO678" onclick="somefunction('PQR');" name="GHI" value="STU90" type="radio">
</span>
<span>
<input name="GHI" value="JKL45" type="radio">
<input name="GHI" value="STU90" type="radio">
</span>
我在下面列出了JavaScript的大部分内容。此脚本将保存为网页浏览器快捷方式(书签/收藏夹)的"URL“。这通常被称为"Bookmarklet“(或IE的"Favlet”)。
到目前为止,我的情况如下:
javascript:
(function(){
function dorado(rado){
/*
Here I want to test if the value of the "ID" for
the element "rado" matches any 1 of 2-or-3 different
regex's. If there is no "ID" then I'd test "Name" and "Value"
If none of the regex's match, I'll return.
Otherwise, I'll execute additional code depending on which regex matched.
*/
}
var x,k,f,j;
x=document.forms;
for (k=0; k<x.length; ++k) {
f=x[k];
for (j=0;j<f.length;++j)
// call dorado() only for "radio" elements.
if (f[j].type.toLowerCase() == "radio")
dorado(f[j]);
}
}
)();
编辑: 9/11/2013 5:48下午(CT),提供了更多细节。
一点澄清..。"radio“属性应该唯一地标识类型为”"<input"
“的页面上的每个元素。在某些情况下,"<input"
元素可能没有它的"ID“属性集。在这些情况下,我必须一起检查“无线电名称”和“无线电值”,因为在单选按钮被组合为“多个中的一个”的情况下,“无线电名称”不会唯一地标识每个无线电元素(“无线电名称”通常对所有分组的无线电元素都是相同的),而“无线电-值”对于页面上的许多无线电元素可能是相同的。
因此,当我检查每个"radio“元素(在循环中)时,首先需要确定是否设置了”radio“属性。
如果设置了“radio”属性,则需要测试"ID“是否与2或-3种不同的正则表达式中的任何1匹配。如果没有匹配的话,我就“回来”。否则,我将根据匹配的regex执行额外的代码。
同样,如果未设置“radio”属性,则需要测试"name“和"value”是否与2或-3种不同的正则表达式中的任何1匹配。如果没有匹配的话,我就“回来”。否则,我将根据匹配的regex执行额外的代码。为了达到正则表达式的目的,可以将"name“和"value”组合在一起,如下所示:
radioName = /* name attribute of element */;
radioValue = /* value attribute of element */;
teststr = radioName . ":" . radioValue;
预定义regex表达式字符串可能是最简单的,如:
var IDregexlist=new Array("/test1/","/test2/","/test3/"); /* example: "/ABC[0-9]+/", "/MNO[0-9]+/" ... */
var NVregexlist=new Array("/test4/","/test5/","/test6/"); /* example: "/GHI:JKL[0-9]+/", "/GHI:STU[0-9]+/" ... */
然后在dorado函数中,测试数组中每个项的regex匹配情况,如下所示:
for each (rexpr in IDregexlist) {... };
除了需要知道函数dorado(rado){ .}之外,我不应该对大部分JavaScript代码有问题:
发布于 2013-09-08 05:42:57
//radio matches any 1 of 3 regexes
var regexes = {valueRegex: /test/, idRegex: /\d/, nameRegex: /\w/};
var inputs = document.getElementsByTagName('input');
var radios = Array.prototype.filter.call(inputs, function(input) {
return input.type === 'radio';
});
radios.forEach(function(radio) {
doRado(radio);
});
function doRado(radio) {
var keys = Object.keys(regexes);
for(var i = 0, len = keys.length; i < len; i ++) {
//which: if there's no ID, test name and value
var which = radio.id || radio.name || radio.value;
var match = which.match(regexes[keys[i]]);
if(match) {
//do something depending on which regex matched
console.log(which + ' matched regex ' + keys[i]);
break;
}
}
}
jsFiddle Demo
https://stackoverflow.com/questions/18680505
复制相似问题