从输入控件检索特定模式类型的子节点
Retrieve child nodes of specific schema type from input control
我有一个遗留文档,其中有一些额外的基于模式的标记:
<td class="inputControl">
<input id="OffsetAccountsRequired_R0" type="radio" name="OffsetAccountsRequired_N" value="Y" >Yes
<tla:instruction type="unhide" value="OffSetAccountsApp1"></tla:instruction>
<tla:instruction type="jscript" value="//Irrelevant JavaScript here"></tla:instruction>
</input>
<input id="OffsetAccountsRequired_R1" type="radio" name="OffsetAccountsRequired_N" value="N">No
<tla:instruction type="hide" value="OffSetAccountsApp1~OffSetAccountsAppls1and2"></tla:instruction>
</input>
<input id="OffsetAccountsRequired_R2" type="radio" name="OffsetAccountsRequired_N" value="" checked="true" class="hiddenRadio" onclick="validate_js(this)">
<tla:instruction type="hide" value="OffSetAccountsApp1~OffSetAccountsAppls1and2"></tla:instruction>
</input>
</td>
和一些由validate_js(this)事件调用的可怕的JavaScript在这些标签上工作:
// Calling line - in this case 'obj' is the input control 'OffsetAccountsRequired_R2'
tlaInstructions = getInstructionTags(obj, 'tla:instruction');
function getInstructionTags(inputID,tagType){
var coltla;
var coltlaArray = new Array();
tagType = tagType.toUpperCase();
var tlaFinished = false;
coltla = inputID.parentNode.childNodes;
for(var i=0;i<coltla.length;i++){
if(coltla[i].nodeName.toUpperCase() == 'INPUT' && coltla[i].id == inputID.id){
for(var j=i;j<coltla.length;j++){
if(coltla[j].nodeName.toUpperCase() == tagType){
coltlaArray[coltlaArray.length] = coltla[j];
}
if(coltla[j].nodeName.toUpperCase() == '/INPUT'){
tlaFinished = true;
break;
}
}
}
if(tlaFinished){
break;
}
}
return coltlaArray;
}
}
我的任务是使这个JavaScript达到规范,以便它可以在IE9中工作(它以前只在vb6 web浏览器控件中使用过)。
就我有限的JavaScript技能而言,代码的目的是从输入元素中检索所有的tla:指令节点。它使用coltla = inputID.parentNode.childNodes
看起来很奇怪,因为它上升了一级,然后又下降了一级。我认为它会这样做,因为如果您只使用coltla = inputID.getElementsByTagName('tla:instruction')
,则检索tla:指令元素不会检索节点。
是否有更简单的方法从输入控件中检索特定类型的元素数组?
根据HTML规范input
标签不能有任何内容。
开始标签:required,结束标签:forbidden
因此,它们被附加到输入元素的父元素上因此inputID.parentNode.childNodes
下面是使用nextSibling
function getInstructionTags(inputID,tagType){
var coltla;
var coltlaArray = [];
tagType = tagType.toUpperCase();
var tlaFinished = false;
var next = inputID;
while ( !tlaFinished ) {
var next = next.nextSibling;
tlaFinished = next == null;
if ( !tlaFinished ) {
var nodeName = next.nodeName.toUpperCase();
if ( nodeName == tagType ) {
coltlaArray.push(next);
} else {
tlaFinished = (nodeName != '#TEXT');
}
}
}
return coltlaArray;
}
相关文章:
- 使用模式格式化Number类型输入中的值
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- 如何在javascript对象中设置属性的类型,就像mongoose模式设计一样
- 如何在模式窗口中从html表单文件类型打开图像
- 其他类型的文件上传中的输入模式
- 在无类型语言中是否存在模式匹配之类的东西
- 模块模式中的私有方法:类型错误:未定义不是一个函数
- 处理输入类型文件模式中的按键
- 它是什么类型的Javascript模式
- 为什么正则表达式模式不符合 javascript 数据类型的条件
- 引导模式委托偶数类型语法
- c#asp.net如何使用bootstrap模式将视频源文件名添加到不同的媒体类型中
- 为什么NaN不是json模式基元类型
- 输入类型复选框在引导模式中不起作用
- javascript自定义模式验证类型
- 如何获取JSON对象的模式并输出到包含类型的字符串
- Phonegap构建android禁用home/power/softkeys (kiosk模式类型的应用程序)
- 这个JS遵循什么类型的模式?
- 从输入控件检索特定模式类型的子节点
- 如何确定字符串是否与模式类型匹配